2013-08-07 8 views
6

ノード(0.10.15)とexpress(3.3.4)を最新のnode-sassとともに使用しています。 。私のapp.jsファイルは次のようになります:最新ノード/エクスプレスでnode-sassが自動コンパイルされていない

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

他のバージョンとは以前に動作しましたか? –

+0

私はそれ以来、この仕事を得るために怒鳴りの寄付コンパスに移動しました。 – bjork24

答えて

8

ミドルウェアは、アプリに添付された順に実行されます。 node-sassミドルウェアは、scssファイルをcssにコンパイルするだけで、サービスを提供しません。 staticミドルウェアは、ファイル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. sasscssファイルに対する要求に気づきます。 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を設定する際に重大な問題がありました。結局私は問題を理解しました。ノード-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を使用しようとしていました。

有効なCSSまたはscssファイルに置き換えたら、koa-staticを使用してコンパイルしてレンダリングしました。

koa-sassの問題ですが、koa-sassはnode-sassをジェネレータでラップするだけで、ここに所属します(IMO)。

関連する問題