内からmodule.exportsはを取得します。私はこのコードを持っているファイルで同じファイル
私はこれが働くだろうと思った:
this.greet()
しかし、それはしませんでした。
私は使用しなければならないリファレンスは何ですか?
内からmodule.exportsはを取得します。私はこのコードを持っているファイルで同じファイル
私はこれが働くだろうと思った:
this.greet()
しかし、それはしませんでした。
私は使用しなければならないリファレンスは何ですか?
通常、これはうまくいくはずですが、なぜ失敗するのかを見てみましょう。
最初のいくつかの背景
は何が起こるかというとexports
はその後で、exports
等require
、module
、__dirname
のようないくつかの他のものと一緒に、モジュールの内容をラップクロージャーに渡される、オブジェクトがあるということですrequire()
によって返されました。
見る:モジュール内https://github.com/ry/node/blob/master/src/node.js#L327
this
module
は、オブジェクトは、exports
オブジェクトへの参照を保持し、exports
オブジェクトを指します。モジュール内の名前空間はクロージャを介して提供されます。
最後に、グローバル名空間を提供し、process
のようなものをホストするglobal
オブジェクトもあります。問題
の
例
// main.js
this.bla = function(){} // sets bla on the the exports object
require('./sub');
console.log(this); // { bla: [Function] }
console.log(exports); // { bla: [Function] }
console.log(module); /* { id: '.',
exports: { bla: [Function] },
parent: undefined,
filename: '/home/ivo/Desktop/main.js',
loaded: false,
exited: false,
children: [] } */
// sub.js
this.greet = function() {} // sets greet on the exports object
console.log(this); // { greet: [Function] }
console.log(exports); // { greet: [Function] }
console.log(module); /* { id: './sub',
exports: { greet: [Function] },
parent:
{ id: '.',
exports: { bla: [Function] },
parent: undefined,
filename: '/home/ivo/Desktop/main.js',
loaded: false,
exited: false,
children: [] },
filename: '/home/ivo/Desktop/sub.js',
loaded: false,
exited: false,
children: [] } */
原因あなたのコードが動作しないという事実のための唯一の説明は、環境変数NODE_MODULE_CONTEXTS
がゼロより大きな整数に設定されたことです。
この場合、モジュールは独自のコンテキストで実行されます。メインモジュール内のthis
は、global
オブジェクトとその内側のサブモジュールを参照するため、サンドボックスオブジェクトを参照します。したがって、this.foo
はexports
オブジェクトにプロパティを設定しません。
参照:https://github.com/ry/node/blob/master/src/node.js#L98
そして:NODE_MODULE_CONTEXTS
がである場合には
console.log(process.env); // get a list of all variables
// get just the one that's causing trouble, if this returns a number > 0 then it's in effect
console.log(process.env['NODE_MODULE_CONTEXTS']);
:https://github.com/ry/node/blob/master/src/node.js#L296
問題
を修正あなたはノードのプロセスに渡された環境変数を確認することができますあなたの~/.bashrc
と~/.bash_profile
ファイルにexport NODE_MODULE_CONTEXTS=1;
のようなものをチェックする必要があります。 それを除く。
これらの2つのファイルの変更は、作成時にのみ読み込まれるため、必ず新しい端末を開くようにしてください。
ちょうど私の環境のvaraibleに関する答えがあなたに役立ったかどうか尋ねたかった、そうでなければこれは提出する必要がありますバグかもしれません:) –