2016-10-02 39 views
0

我需要main.js(在运行脚本)的函数的模块的范围要被识别:添加功能到外部模块中的NodeJS

Modules.js:

function x(){ 
    functionNeeded(); 
} 

module.export.x = x; 

Main.js

var m = require("modules.js"); 

function functionNeeded(){ 
    //function needed to call 
} 

//m.x() is called successfully 
//but fails because functionNeeded is not defined (check modules.js) 
//with m.functionNeeded = functionNeeded before calling m.x() it also fails. 

有没有人对这个如何实现这样我可以传播本功能的任何想法main.js跨几个模块的离子,而不复制或传播到整个模块?

+0

为什么不把它放在它自己的模块中,并且需要它在你需要的地方。另一种选择是将它作为参数传递。 – adeneo

+0

不改变module.js,你不能这样做。 module.js在它自己的范围内运行,并且你不能从module.js之外改变这个范围(除了弄坏全局变量之外,这绝对不是一个好主意)。当然,您可以编辑module.js以多种方式解决此问题(最灵活的方法是将'functionNeeded()'放在它自己的module中,module.js可以'require()'或者可以传递它in'x()'作为回调 – jfriend00

回答

0

我真的不推荐这,但你global可用在你的节点:

global.functionNeeded = function() { 
}; 

...但:

  • 你必须确保你的初始化任何引用该函数之前运行。
  • 这使得你的代码很难推理;它没有明确说明函数来自何处或何时可用。

这是最好只require你的每一个功能依赖于它模块中。

+0

如果我调用几个模块,每个模块都有自己的require,那么是否存在递归要求的问题? – Fane

+0

否; nodejs有模块缓存;模块只会在第一次它是必需的,然后存储在缓存中;之后,当需要相同的模块时,您将返回对同一个模块对象的引用。 – Jacob

1

您可以将它作为参数提供的功能模块:

Module.js:

function x(functionNeeded){ 
    functionNeeded(); 
} 

module.export.x = x; 

Main.js

var m = require("modules.js"); 

function functionNeeded(){ 
    //function needed to call 
} 

m.x(functionNeeded)