內獲取module.exports在一個文件中我有這樣的代碼:從同一文件
module.exports.greet = function() {...}
我想使用該功能從同一個文件中。
我想這會工作:
this.greet()
但事實並非如此。
什麼是我必須使用的參考?
內獲取module.exports在一個文件中我有這樣的代碼:從同一文件
module.exports.greet = function() {...}
我想使用該功能從同一個文件中。
我想這會工作:
this.greet()
但事實並非如此。
什麼是我必須使用的參考?
通常,這應該工作得很好,但讓我們看看爲什麼這可能會失敗。
一些背景第一
什麼情況是,exports
的是,有一些其他的東西像require
,module
,__dirname
等一起,被傳遞到一個封裝模塊內容關閉對象,exports
然後由require()
返回。
參見:https://github.com/ry/node/blob/master/src/node.js#L327
this
模塊內部指exports
對象,則module
對象保存到exports
對象的引用。模塊內的名稱空間通過閉包提供。
最後還有global
對象,它提供全局名稱空間並承載諸如process
之類的東西。
例子
// 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
人和:https://github.com/ry/node/blob/master/src/node.js#L296
解決問題
您可以檢查中通過了該節點過程中對環境變量:
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']);
在情況下NODE_MODULE_CONTEXTS
是效果,您需要檢查您的~/.bashrc
和~/.bash_profile
文件的類似export NODE_MODULE_CONTEXTS=1;
和 去掉它。
請確保打開一個新的終端,因爲更改這兩個文件只有在創建時纔讀入。
只是想問我的關於環境變量的回答是否對你有幫助,否則這可能是一個錯誤應該提交:) – 2010-12-03 18:09:52