2013-05-07 59 views
5

通常,在Express中使用EJS模板時,我不必重新啓動服務器即可查看對模板所做的更改。我只是對.ejs文件進行更改並重新加載瀏覽器以查看我的更改。當我更改swig模板時,爲什麼需要重新啓動express服務器?

但是,使用swig模板(我非常喜歡使用ejs),如果對.html文件進行更改,則必須重新啓動服務器以查看瀏覽器中反映的更改。

這是一個錯誤,還是僅僅是我忽略的其他內容的副作用?

我不是在尋找像grunt watch,nodemon或supervisor這樣的工具,我只是希望我的swig模板在可能的情況下表現得更像ejs模板。

回答

0

一般來說,模板有兩個步驟。第一個是「編譯」模板轉換爲函數,然後是「渲染」,其中函數只是用局部變量執行。

對於ejs和大多數模板系統,編譯是在開發過程中對每個請求進行的。然而,對於swig,即使明確表示「不要在生產中暫停緩存」時,它可能總是緩存編譯步驟,因此在重新啓動之前「功能」不會更改。

解決方案?詢問swig,告訴他們支持啓用/禁用緩存https://github.com/visionmedia/consolidate.js

7

Swig API Documentation中所述,您可以將Swig配置爲不緩存模板。

我用類似這樣的東西:

swig.init({ 
    .. 
    cache : app.get('env') === 'production', 
    .. 
}); 

這將使它只緩存編譯模板在生產環境中。

+1

在SO上找到答案比閱讀手冊要快。所以在谷歌搜索上的答案也會比其他任何東西都高。 – Mikhail 2013-08-01 21:00:42

+0

你到底在哪裏放? – Squirrl 2013-12-03 20:01:29

+1

@Squirrl再次,[見精細手冊](http://paularmstrong.github.io/swig/docs/#express)。不過,我注意到Swig API已經改變了,現在'.init'似乎被稱爲['.setDefaults'](http://paularmstrong.github.io/swig/docs/api/#setDefaults)。 – robertklep 2013-12-03 20:10:11

相關問題