node.js module のドキュメントを調べていたところ、各モジュールにプロパティ-module.parent
。私はそれを使おうとしましたが、モジュールキャッシング-module.parent
は、現在のコンテキストに関係なく、最初にrequire()を実行したモジュールだけに思われます。
それでそれの使い方は何ですか? currentrequire()ingモジュールへの参照を取得する他の方法はありますか?現在、モジュールを関数にラップしているので、次のように呼び出されます。
require("mylibrary")(module)
しかし、それは次善のようです。
「親」は、スクリプトを解釈(およびキャッシュ)するモジュールです(存在する場合)。
// $ node foo.js
console.log(module.parent); // `null`
// require('./foo')
console.log(module.parent); // `{ ... }`
期待しているのは「呼び出し元」であり、Nodeは保持されません。そのためには、現在使用しているエクスポートされた関数がクロージャーのクロージャーになる必要があります値。
これには回避策があります。 Nodeは、モジュールのロードが完了する前にモジュールをモジュールキャッシュに追加します。これは、モジュールが自身から自身を削除できることを意味しますロード中のモジュールキャッシュ!モジュールがrequire
'daになるたびに、モジュールの新しいインスタンスがロードされます。
Magic.js
console.log('Required by ' + module.parent.filename);
delete require.cache[__filename];
Module1.js
//prints "Required by Module1.js"
require('./Magic');
Module2.js
//prints "Required by Module2.js"
require('./Magic');
もちろん、これの副作用として、モジュールはシングルトンではなくなります。そのため、Magic.js
をコーディングする必要があります。グローバルデータを保存する必要がある場合は、キャッシュからそれ自体を削除しないrequire()されたモジュールにいつでも保持できます。