使用node(0.10.15)和express(3.3.4)以及最新的node-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'));
});
我缺少什么才能让自动编译?
如果重要,我正在使用主管来监控变化。
答案 0 :(得分:8)
中间件按照附加到应用程序的顺序执行。 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'
)确实存在,则会提供该文件。答案 1 :(得分:0)
我也很难与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 - 但我的路径中没有'样式表':我的html模板文件正在查看/stylesheets/styles.css
所以我不得不删除前缀为prefix: '/stylesheets'
。
接下来我遇到了scss文件的问题 - 我不小心复制了一个旧的.styl文件,它试图使用nib - 我在发现debug:true setting之后找到了它。
只要我用有效的css或scss文件替换它,它就会使用koa-static编译和渲染。
虽然这是一个koa-sass问题,但是koa-sass只是使用生成器包装node-sass,所以它属于这里(IMO)。