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
中间件只能将scss
文件编译为css
,而不能提供服务。 static
中间件能够为已编译的css
文件提供服务,但是,只要css
文件尚未编译,就不能这样做。 如果您切换static
和sass
中间件,一切应该按预期工作:
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
时会发生以下情况:
-
sass
注意到一个css
文件的请求。 如果dest文件(__dirname + '/public' + '/style.css'
)是最新的,它什么也不做。 否则,它会查找src文件(__dirname + '/public/sass' + '/style.scss'
)并编译它(如果存在)。 -
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)。