43

node.js モジュールのドキュメントを調べていたところ、各モジュールにプロパティ- があることに気付きましたmodule.parent。私はそれを使用しようとしましたが、モジュールのキャッシュによって焼失しました-現在のコンテキストに関係なく、最初に require()module.parentしたモジュールにのみ見えます。

それで、それの使用法は何ですか?現在のrequire()ing モジュールへの参照を取得する他の方法はありますか? 現在、モジュールを関数でラップしているため、次のように呼び出されます。

require("mylibrary")(module)

しかし、それは次善のようです。

4

2 に答える 2

50

「親」は、スクリプトが解釈(およびキャッシュ)される原因となったモジュールです(存在する場合)。

// $ node foo.js
console.log(module.parent); // `null`
// require('./foo')
console.log(module.parent); // `{ ... }`

あなたが期待しているのは、ノードがあなたのために保持しない「発信者」です。そのためには、現在使用しているエクスポートされた関数を値のクロージャーとして使用する必要があります。

于 2012-11-30T20:15:48.497 に答える
25

これには回避策があります。ノードは、モジュールのロードが完了する前に、モジュール キャッシュにモジュールを追加します。これは、モジュールがロード中にモジュール キャッシュから自身を削除できることを意味します。その後、モジュールがロードされるたびに、モジュールrequireの新しいインスタンスがロードされます。

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() されたモジュールにいつでも保存できます。

于 2015-03-25T17:35:55.167 に答える