別のファイルで既に必要とされているモジュールを必要としていますが、オブジェクトを取得すると、そのキーの多くが未定義です。たくさんのキーがそこにありますが、公開された関数のいくつかを呼び出した後でも、いくつかはありません。オブジェクトを console.log すると、キーがそこにあるように見えます。
例:
var mod = require('myModule')
console.log(mod) // { 'aKey':[Function], 'doStoff':[Function] }
console.log(mod.aKey) // undefined
mod.doStoff() // calls 'aKey'
//TypeError: Object #<Object> has no method 'aKey'
//this error is thrown inside myModule
このモジュールがロードされたときに何かおかしなことをしていたとしても、これはそれほど驚くことではありませんが、モジュールはすでにロードされており、メインの js ファイルですでにいくつかの目的で使用しています。
私が考えることができる唯一のことは、標準から外れています.メインのjsファイルでこのモジュールを必要としました(そしてそれは機能します)が、機能しない場所はメインで必要なモジュール内です.
より明確にするために->
- main.js には myModule が必要です
- main.js には otherModule が必要です
- otherModule には myModule が必要です
myModule は npm によってインストールされましたが、npm がインストールするようにどこかに配置されるまで、node_modules フォルダー内の所定の場所に otherModule のプロトタイプを作成しています。
これが問題を引き起こす理由がわかりません。require から返されたオブジェクトは、require キャッシュにそのまま保持されるので、その後いつでも必要になったときに同じオブジェクトを取得できると思いました。私のオブジェクトが部分的に削除されたか何かのようです。
これは何が原因ですか?どうすればいいですか?