内获取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