Node-sass不是在最新的node / express中自动编译的

使用节点(0.10.15)和expression式(3.3.4),以及最新的节点sass,我无法获得我的scss文件进行编译。 我的app.js文件如下所示:

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自动编译?

如果重要,我正在使用主pipe来监视更改。

       

网上收集的解决方案 "Node-sass不是在最新的node / express中自动编译的"

中间件按照它们附加到应用程序的顺序执行。 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' )确实存在,它将被提供。

我也有严重的问题,设置这个与Koa(koa.js)和koa-sass。 最终我找出了问题。 node-sass对自己来说太“聪明”了:

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

我试图访问/public/sass/stylesheets/styles.css时遇到了500,但是我的path中没有“样式表”:我的html模板文件正在查看/stylesheets/styles.css所以我有删除前缀为prefix: '/stylesheets'

接下来,我遇到了一个scss文件的问题 – 我不小心复制了一个旧的.styl文件,它试图使用nib–在发现debug:true设置后发现的。

只要我用有效的css或scss文件replace它,它使用koa静态编译和呈现。

尽pipe这是一个koa-sass的问题,但koa-sass只是用一个生成器来包装node-sass,所以它属于这里(IMO)。