1

我想要的是

是否可以将本地人传递给所需的模块?例如:

// in main.js
var words = { a: 'hello', b:'world'};
require('module.js', words);

// in module.js
console.log(words.a + ' ' + words.b) // --> Hello World

我问这个是因为在 PHP 中,当您需要或包含时,包含另一个文件的文件会继承它的变量,这在某些情况下非常有用,如果这也可以在 node.js 中完成,我会很高兴。

我尝试过但没有奏效的方法

 var words = { a: 'hello', b:'world'};
 require('module.js', words);

 var words = { a: 'hello', b:'world'};
 require('module.js');

这两个都给出了ReferenceError: words is not defined何时words被调用module.js

那么没有全局变量有可能吗?

4

2 回答 2

2

您要做的是使用参数导出它,以便您可以将变量传递给它。

module.js

module.exports = function(words){
    console.log(words.a + ' ' + words.b);
};

main.js

var words = { a: 'hello', b:'world'};
// Pass the words object to module
require('module')(words);

您也可以在需要中去掉 .js :)

于 2012-04-21T13:42:47.970 回答
0

问题是:你想达到什么目标?

如果您只想导出静态函数,可以使用tehlulz 的答案。如果你想在export属性中存储一个对象并从 require-caching 中受益,node.js 提供的(脏)方法对你来说是全局的。我想这就是你尝试过的。

在 Web 浏览器上下文中使用 JavaScript,您可以使用该window对象来存储全局值。Node 只为所有模块提供了一个全局process对象:对象:

main.js

process.mysettings = { a : 5, b : 6};
var mod = require(mymod);

mymod.js

module.exports = { a : process.mysettings.a, b : process.mysettings.b, c : 7};

或者,如果您对导出缓存不感兴趣,您可以执行以下操作:

main.js

var obj = require(mymod)(5,6);

mymod.js

module.exports = function(a,b){
 return { a : a, b : b, c : 7, d : function(){return "whatever";}};
};
于 2012-04-21T13:53:14.733 回答