私はNodeJSを初めて使用するので、おそらくいくつかの間違いをしています。
Myappという外部ファイルにたくさんのコードを書きました。 NodeJS for Windowsを起動し、インタープリターウィンドウから次のように入力します。
var myapp = require('d:/myapp.js');
次に、外部モジュールで関数と変数を使用できます。
問題は、myappのコードを更新すると、インタープリターがファイルを再読み取りせず、古いバージョンを使用することです。
さて、そもそもこれは正常ですか?この問題を回避する方法は?
追伸:私はインターネットで何時間も過ごし、これを含む多くのフォーラムで検索しました。それは他の何よりも混乱していました。
ありがとう。
コメントで示唆されているように ここにいくつかの答え があります。
ただし、それらはREPLフレンドリーではなく、追加のモジュールを使用することさえあります。
これは、他の質問に関する議論に触発されて、REPLに貼り付けることができる1行のソリューションです。
_function nocache(module) {require("fs").watchFile(require("path").resolve(module), () => {delete require.cache[require.resolve(module)]})}
_
この関数は、ファイルが変更されるたびにモジュールをキャッシュから削除します。使用するには、REPLに貼り付け、uncache("d:/myapp.js")
を呼び出してから、通常はrequire
を使用します。
_> function nocache(module) {require("fs").watchFile(require("path").resolve(module), () => {delete require.cache[require.resolve(module)]})}
> nocache("d:/myapp.js");
> var myapp = require("d:/myapp.js");
......
> myapp = require("d:/myapp.js");
....
_
他の答え(重複して@mihaiによる)はすべて正しいですが、この特定の例に対する最も直接的な答えは次のとおりです。
_delete require.cache['d:/myapp.js'];
_
モジュールは、fullファイル名にキー設定された_require.cache
_にキャッシュされます。この特定のケースでは、完全なファイル名(ie_d:/myapp.js
_)がロードに使用されたため、問題の解決策は非常に簡単です。 。
ただし、ほとんどの場合、完全なファイル名は使用されておらず、不明ですらあります。たとえば、require('fs')
はファイルシステムモジュールをロードするために使用されますが、開発者は完全で適切なファイル名を失うことになります。そのため、require.resolve('fs')
は、モジュールをキャッシュするためのキーとして使用されるファイル名を返します。