2013-08-07 85 views
6

使用節點(0.10.15)和express(3.3.4)以及最新的node-sass,並且我無法讓我的scss文件編譯。我app.js文件看起來像這樣:Node-sass不是自動編譯的最新節點/ express

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

var app = express(); 

// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 
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.use(
    sass.middleware({ 
    src: __dirname + '/public/sass', 
    dest: __dirname + '/public', 
    debug: true, 
    outputStyle: 'compressed' 
    }) 
); 

// development only 
if ('development' == app.get('env')) { 
    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')); 
}); 

我缺少的是讓SASS自動編譯?

如果重要,我使用主管來監視更改。

+0

它以前工作/與其他版本? –

+0

沒有。我已經轉移到grunt-contrib-compass來獲得這個工作。 – bjork24

回答

8

中間件按照它們連接到應用程序的順序執行。 node-sass中間件僅將scss文件編譯爲css,它不提供它們。 static中間件能夠爲已編譯的css文件提供服務,但是,只要css文件尚未編譯,它就不能這樣做。如果您切換staticsass中間件,一切都應該按預期工作:

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

app.use(express.static(path.join(__dirname, 'public'))); 

現在將出現以下情況時,您請求/style.css

  1. sass發現有一css文件的請求。如果dest文件(__dirname + '/public' + '/style.css')是最新的,它什麼也不做。否則,它會查找src文件(__dirname + '/public/sass' + '/style.scss')並編譯它(如果存在)。
  2. static通知對靜態資產的請求。如果請求的文件(path.join(__dirname, 'public') + '/style.css')確實存在,它將被提供。
0

我也有嚴重的問題設置這與Koa(koa.js)和koa-sass。最終我找出了問題。節點薩斯是它自己的好「太聰明」:

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

我得到一個500,當它試圖訪問/public/sass/stylesheets/styles.css - 但我沒有在我的道路「樣式」:我的HTML模板文件看着/stylesheets/styles.css,所以我不得不刪除前綴prefix: '/stylesheets'

接下來我遇到了一個scss文件的問題 - 我不小心複製了一箇舊的.styl文件,它試圖使用nib--在發現debug:true設置後發現的。

只要我用有效的css或scss文件替換它,它就會使用koa-static進行編譯和呈現。

雖然這是一個koa-sass問題,但koa-sass只是將節點sass與生成器包裝在一起,因此它屬於此處(IMO)。

相關問題