2013-05-07 10 views
5

通常、ExpressでEJSテンプレートを使用している場合、テンプレートを変更したことを確認するためにサーバーを再起動する必要はありません。 .ejsファイルを変更してブラウザをリロードして変更を確認するだけです。swigテンプレートを変更すると、なぜエクスプレスサーバを再起動する必要がありますか?

しかし、swigテンプレート(私は非常にejsよりも好きです)では、.htmlファイルを変更すると、ブラウザに変更が反映されていることを確認するためにサーバーをinorderで再起動する必要があります。

これはバグですか、それとも私が見落としたことの副作用ですか?

私はgrunt watch、nodemon、supervisorのようなツールを探しているわけではありません。私のswigテンプレートは、可能であればejsテンプレートのように動作するようにしたいと思っています。

答えて

0

通常、テンプレートには2つのステップがあります。最初はテンプレートが関数に変換されるところで "コンパイル"され、 "レンダリング"があります。ここで関数は単にローカル変数で実行されます。

ejsおよびほとんどのテンプレートシステムでは、コンパイルは開発中のすべての要求に対して実行されます。しかし、swigでは、expressには「生産中にキャッシュしないでください」と言っていても、コンパイルステップを常にキャッシュしているので、再起動するまで「機能」は変わりません。

溶液ですか?スワイグに尋ねて、キャッシングを有効/無効にするように指示してください。https://github.com/visionmedia/consolidate.js

7

Swig API Documentationで説明したように、テンプレートをキャッシュしないようにSwigを設定できます。

私はこれに似たものを使用します。これは、それが唯一の本番環境でコンパイルされたテンプレートをキャッシュようになります

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

を。

+1

SOでの回答の検索は、マニュアルを読むよりも高速です。だから、他の何かよりもGoogle検索の方が高い答えが出てくる。 – Mikhail

+0

そして、どこでそれを置くのですか? – Squirrl

+1

@Squirrlもう一度、[ファインマニュアルを参照](http://paularmstrong.github.io/swig/docs/#express)。しかし、私はSwig APIが変更されたことに気づき、 '.init'は[' .setDefaults'](http://paularmstrong.github.io/swig/docs/api/#setDefaults)と呼ばれるようです。実際に働いたのは – robertklep

関連する問題