2012-03-02 54 views
1

在咖啡上運行express後,最終將LESS編譯爲一個Node.js應用程序後,我遇到了一個問題,在節點/快遞/咖啡設置中未更改的LESS文件不會自動重新編譯

對LESS文件的更改不會從express調用的LESS編譯器調用重新渲染。

在我的主要app.coffee文件,這可以(按順序)

app.use exp.compiler { src: __dirname + '/public', dest: __dirname + '/public', enable: ['less'] } 
app.use exp.methodOverride() 
app.use exp.bodyParser() 
app.use exp.cookieParser() 
app.use exp.static __dirname + '/public' 

之後可以發現,會話和中間件增加。

當請求持續通過應用程序重新啓動時,無法將.less文件重新編譯爲.css時出現問題。

我曾嘗試調換exp.compilerexp.static線,但什麼也沒有改變除了會發生什麼情況第一客戶端請求(總之,CSS文件渲染,但不提供)。

刪除.css文件顯然會讓代碼重新編譯.less到.css中,但這不是我想象的那樣的編譯器。還有什麼我可以做的嗎?

+0

我會建議你使用命令行'lessc'程序,但它似乎沒有手錶模式。 – 2012-03-02 23:50:39

+0

野蠻的猜測,但嘗試檢查您的文件權限,並將編譯器行放在'express.static' – 2012-03-03 05:54:43

+0

之前,這對重新編譯也沒有影響。我想我可能會寫一個解決方法,在啓動主應用程序文件之前刪除所有的css文件..但是這看起來更像是一種破解而不是解決方案。 – arvidkahl 2012-03-04 18:57:13

回答

1
// Environment Respective Less Watch Script 
if (app.settings.env === 'development') { 
    var stylesheets = fs.readdirSync(path.join(__dirname, 'views', 'stylesheets')).filter(function(f) { 
    return f.match(/\.less$/); 
    }); 
    stylesheets.forEach(function(f) { 
    fs.watchFile(path.join(__dirname, 'views', 'stylesheets', '/' + f), function(c, p) { 
     if (c.mtime.getTime() !== p.mtime.getTime()) { 
     // Remove the existing CSS file 
     fs.unlinkSync(path.join(__dirname, 'public', 'stylesheets', 'bootstrap.css')); 
     console.log(' Successfully removed existing stylesheet for recompiling'); 
     } 
    }); 
    }); 
} 
0

研究表明,目前沒有-watch-標記與express或lessc中的編譯器一起使用。因此,只有在事先手動刪除css文件的情況下,才能重新編譯內部快速工作。

+0

您應該輸入用於節點,快速和更少的版本。我可以通過以下版本觀看我的.less文件: 「express」:「> = 2.5.9 <3.0.0」, 「coffee-script」:「> = 1.1.3 <2.0 .0「, 」less「:」> = 1.3.0 <2.0.0「 – 2012-04-29 23:55:13

相關問題