如何在NodeJS中使用函数和对象而不需要它们

时间:2018-06-12 13:40:44

标签: javascript node.js import module export

我一直在研究NodeJS大约一年,今天我发现了一些奇怪的东西。我们都知道,为了在另一个模块中使用模块(函数,对象或变量),我们必须导出和导入它,除了String,Number,Promise等本机模块。我安装了一个外部包用于单元测试,名为{ {3}}

这里奇怪的是我创建了两个名为logic.jslogic.test.js的测试模块,我没有导入Jest模块,但是我可以访问它的所有方法。让我们展示一些代码:

logic.js

module.exports.add = function(a, b){
    return a + b;
}

logic.test.js

const lib = require('../logic')

test('Add - Should return the sum of two numbers', () => {
    const result = lib.add(1,3);
    expect(result).toBe(4);
});

正如您在logic.test.js中所看到的,我可以访问 expect test 方法,而且我没有任何关于笑话。

这里的问题是:

  • 这是如何形成的?
  • 使用我的模块
  • 这是一个很好的做法

1 个答案:

答案 0 :(得分:2)

正如 Jonas W 在评论中所述,他们使用了所有应用程序通用的global变量。

使用全局变量非常简单

test.js

global.myObject = 'MyMan'

app.js

require('./test')

console.log(myObject)

正在加载app.js将呈现MyMan

您可能会说我实际上导入了测试模块而Jest没有。

问题在于您使用node yourFile.js执行节点应用程序,但是您使用jest命令行实现了您的jests测试。

jest命令行处理其框架(expecttest方法。)和您的脚本之间的绑定。

这是一个好习惯吗?

我会说不。除非你打算让像Jest这样的库拥有自己的命令行启动器,并且你想将这样的工具提供给库的用户。

Node的力量存在于模块组织中,不要害怕使用它们。