[解決済み] node.js require()キャッシュ - 無効化可能か?
2022-03-14 19:27:51
質問
node.jsのドキュメントより。
<ブロッククオートモジュールは、最初にロードされた後にキャッシュされます。これは、(とりわけ)require('foo')を呼び出すたびに、同じファイルに解決されるのであれば、まったく同じオブジェクトが返されることを意味します。
このキャッシュを無効にする方法はありますか?例えば、ユニットテストでは、各テストが新しいオブジェクトで動作するようにしたいのですが。
解決方法は?
循環的な依存関係がある場合でも、問題なく常に安全に require.cache のエントリを削除することができます。なぜなら、削除するときは、モジュールオブジェクト自体ではなく、キャッシュされたモジュールオブジェクトへの参照を削除するだけだからです。循環的依存関係がある場合、このモジュールオブジェクトを参照しているオブジェクトがまだ存在するため、モジュールオブジェクトはGCされません。
があるとします。
スクリプトa.jsです。
var b=require('./b.js').b;
exports.a='a from a.js';
exports.b=b;
と スクリプトb.jsです。
var a=require('./a.js').a;
exports.b='b from b.js';
exports.a=a;
をすると
var a=require('./a.js')
var b=require('./b.js')
を得ることになります。
> a
{ a: 'a from a.js', b: 'b from b.js' }
> b
{ b: 'b from b.js', a: undefined }
ここで、b.jsを編集してみると。
var a=require('./a.js').a;
exports.b='b from b.js. changed value';
exports.a=a;
と実行します。
delete require.cache[require.resolve('./b.js')]
b=require('./b.js')
を得ることになります。
> a
{ a: 'a from a.js', b: 'b from b.js' }
> b
{ b: 'b from b.js. changed value',
a: 'a from a.js' }
===
上記は、node.jsを直接実行する場合に有効です。しかし、独自のモジュールキャッシングシステムを持つツール、例えば ジェスト というのが正しい記述になります。
jest.resetModules();
関連
-
[解決済み】AWS STS AssumeRoleへのアクセスを可能にする方法
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] Node.jsでファイル/ディレクトリが存在するかどうかを同期的にチェックする
-
[解決済み】Node.jsのrequireとES6のimport/exportを使い分ける。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】mongoError: トポロジーが破壊されました
-
[解決済み】「安全なTLS接続が確立される前にクライアントのネットワークソケットが切断されました」(ノード10
-
[解決済み] エラー: nodejs の get 呼び出しで getaddrinfo ENOTFOUND が発生しました。
-
[解決済み】Mongooseで、日付でソートするにはどうしたらいいですか?(node.js)
-
[解決済み] MongoClient v3.0使用時、db.collectionが関数でない
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み] バルク更新を行う。
-
[解決済み] Node.jsでファイルを自動で再読み込みするには?
-
[解決済み】node.jsのrequireをabsoluteにする方法は?(相対的な代わりに)