2

nodejs のサンプル コードを以下に示します。

var hello_file = require.resolve('hello')

var hello = require('hello')
console.log(m.hello()); // there is a method hello in module hello.js

delete require.cache[hello_file]
console.log(m.hello()); // it still works

削除するとモジュールへの参照が削除されるため、最後の行でエラーがスローされるはずだと思いました。しかし、そうではありません。何が原因で、キャッシュを削除することの本当の意味は何ですか?

4

2 に答える 2

3

キャッシュはそれを認識しなくなりましたが、変数helloには以前にロードされたものへの参照が残っています。

次に呼び出すrequire('hello')と、ファイルからモジュールがロードされます。ただし、保持されている参照を更新するまではvar hello、最初にロードされたモジュールを指し続けます。

于 2013-08-30T04:08:47.493 に答える
0

ご存知のように、ノードは何度もモジュールをロードする必要がある場合でもモジュールを 1 回ロードします。モジュールは最初にロードされた後にキャッシュされます。キャッシュから削除すると、次に必要なときにモジュールがファイルシステムからキャッシュにリロードされます。

于 2013-08-30T04:25:11.317 に答える