6

したがって、nodejsサーバーファイル内には次の行があります。

tools=require("./tools.js");

ツール ファイルには、私が頻繁に変更する関数などが含まれているため、何かを変更するたびにサーバーを再起動する代わりに、tools.js を再要求する方法をいくつか追加するだけでよいと考え、実行しました。しかし、問題は、プログラムを起動し、tools.js を変更して再要求すると、最初に要求されたときの状態のままであるかのように再度要求することです。何?

編集:ファイルの変更時にアプリを再起動したくありません。これは、サーバーを再起動するのと同じであり、これを防ぎたいからです! したがって、モジュールのキャッシュなどを無視して、再要求できるものが必要です。

ここで私を助けることができるアイデアはありますか?

4

5 に答える 5

18

アプリを再起動したくない場合は、必要になるたびにこれを行ってください。

var path = require('path');
var filename = path.resolve('./tools.js');
delete require.cache[filename];
var tools = require('./tools');
于 2012-10-28T15:42:24.987 に答える
4

これで解決しました:

let tools = require("./tools.js"); 
delete require.cache[require.resolve("./tools.js")];
tools = require("./tools.js");

この回答の信憑性

于 2021-01-20T06:59:31.640 に答える
2

私の理解が正しければ、あなたは Node のモジュール キャッシングに遭遇しています。http://nodejs.org/docs/latest/api/modules.html#modules_caching

それがオプションである場合は、代わりに Node の適切なリローダーを検討することをお勧めします。たとえば、https://github.com/isaacs/node-supervisorを参照してください。

于 2012-10-28T12:55:43.183 に答える
2

スーパーバイザーを見てください。スーパーバイザーは、ファイルの変更時にアプリケーションを自動的に再起動でき、セットアップも簡単です。

npm install -g supervisor

supervisor app.js

于 2012-10-28T12:55:51.947 に答える
2

node.js の require()sa モジュールが呼び出されると、require() への後続の呼び出しでメモリからフェッチされ、実際のモジュール ファイルが再度読み込まれることはありません。ファイルが変更されたときにアプリを自動的に再起動する nodemon (https://github.com/remy/nodemon ) などのツールを使用する必要があります。

于 2012-10-28T12:58:09.500 に答える