NodeJS:静态导入可能吗?

时间:2014-08-09 22:27:37

标签: node.js static-import

简短问题:

有没有办法静态导入NodeJS中另一个JS文件的功能? (作为Java的静态导入?)

我想做的例子:

我有一个文件m1.js,其中包含以下功能:

function add(x,y) { return x + y }
exports.add = add

然后我有一个文件app.js导入m1.js

m1 = require('./m1')
var result = m1.add(3,4)

现在,我要做的是导入m1.js的功能,以便我可以调用它们,而不必使用m1.*为呼叫添加前缀:

m1 = require('./m1')
var result = add(3,4)  // instead of m1.add(3,4)

到目前为止我尝试了什么:

我在文件m1.js中尝试了以下内容:

function add(x,y) { return x + y }
exports.static = function(scope) { scope.add = add }

并尝试在m1.js中导入app.js,如下所示,但无法找到add(x,y)

require('./m1').static(this)
var result = add(3,4)

1 个答案:

答案 0 :(得分:4)

你接近你的尝试。在调用this时,您必须进行的一项小改动是将global替换为static

require('./m1').static(global)
var result = add(3,4)

来自documentation

  

全球

     
      
  • {Object}全局命名空间对象。
  •   
     

在浏览器中,顶级范围是全局范围。这意味着在浏览器中如果您处于全局范围var something将定义全局变量。在Node中,这是不同的。顶级范围不是全球范围; Node模块中的var something将是该模块的本地。