2013-03-28 61 views
8

我想讓node-sass使用express,而我根本無法讓它做任何編譯。這是我的app.js文件:node-sass不能編譯節點/ express

var express = require('express') 
    , sass = require('node-sass') 
    , routes = require('./routes') 
    , user = require('./routes/user') 
    , http = require('http') 
    , path = require('path'); 

var app = express(); 

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'ejs'); 
    app.use(sass.middleware({ 
    src: __dirname + '/public/sass', 
    dest: __dirname + '/public/stylesheets', 
    debug: true 
    })); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser('your secret here')); 
    app.use(express.session()); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 

app.configure('development', function(){ 
    app.use(express.errorHandler()); 
}); 

app.get('/', routes.index); 
app.get('/users', user.list); 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log("Express server listening on port " + app.get('port')); 
}); 

我有public/sasspublic/stylesheets,但不管是什麼.scss文件,我在上海社會科學院目錄沒有什麼地方是越來越編譯。還有什麼我需要超越node app.js

我真的很接近放棄,只需安裝sass gem並保持打開額外的選項卡來觀看目錄。

回答

8

它和Stylus中間件一樣令人困惑(據說它受到啓發)。

src文件夾結構應模仿你使用請求CSS文件的路徑到達目的地的最終結構。如果你希望你的CSS文件存儲這樣的:

./public/stylesheets/app.css 

並訪問該文件的URL將是:

http://.../stylesheets/app.css 

您需要配置這樣的中間件:

app.use(sass.middleware({ 
    src: __dirname + '/public/sass', 
    dest: __dirname + '/public', 
    debug: true 
})); 

而你的SASS文件夾結構是這樣的:

./public/sass/stylesheets/app.scss 

我相信它的工作原理是這樣的:

  • 採取HTTP請求的路徑:/stylesheets/app.css
  • 找到SCSS文件,串聯到src URL路徑和替換擴展:./public/sass/stylesheets/app.scss
  • 爲目的地,將URL路徑連接到dest./public/stylesheets/app.css
+0

這是有道理的,但遺憾的是它仍然無法正常工作。 SCSS文件仍然不會被編譯。 – bjork24 2013-03-28 14:21:06

+0

我正在使用*幾乎*你的代碼([gist](https://gist.github.com/robertklep/5264130))並且工作得很好(包括當SCSS文件改變時重新渲染)。也許是一個許可問題? – robertklep 2013-03-28 15:36:08

+0

這真的很奇怪。我有相同的設置和目錄結構,但它根本不適合我。好吧。我會繼續使用我的指南針寶石。 – bjork24 2013-03-28 16:09:59

1

我當時有si獲得節點sass中間件工作的類似問題。我最終還是放棄了,並試圖asset-rack,我也無法得到工作,直到我開始使用這個叉:https://github.com/techpines/asset-rack/pull/76

沮喪,對於資產架叉拉入請求已經圍坐了11個月,我結束了只寫我自己的靜態文件中間件名爲Electricity,它支持薩斯等其他一些很好的功能。

+1

嘿真棒圖書館! – 2014-08-18 08:39:40

1

嘗試使用前綴選項:

app.use(sass.middleware({ 
    src: __dirname + '/public/sass', 
    dest: __dirname + '/public', 
    prefix: '/stylesheets' 
    debug: true 
}));