module.exports

时间:2018-04-30 09:45:17

标签: javascript node.js

对于像我这样的初学者来说,Node.js和JavaScript有时会让人感到困惑。尝试使用摩卡和导出,我在源码typoo.js中发了一个拼写错误:

module.exports,trial = function() {
    console.log('trial')
}

module.exports,之后请注意逗号“,”它本来是“。”如果我没有意外输入逗号。

坦率地说,我对结果很满意。它按照我的意愿工作,不是从函数定义中分离导出。 为什么逗号的工作方式如我所未预料但符合我的意图?

const blah = require('../../../typoo');
trial()
摩卡日志“试用”

1 个答案:

答案 0 :(得分:3)

在松散模式下分配未声明的标识符会创建一个全局变量(我称之为The Horror of Implicit Globals)。这就是你工作的原因,因为

module.exports,trial = function() {
    console.log('trial')
}

使用comma operator,其中每一边都是操作数。两个表达式都被评估,所以你有

module.exports

作为自己的表达式,

trial = function() {
    console.log('trial')
}

作为自己的表达。

你几乎肯定不想创造全球化;相反,做你想做的事情,让trial模块导出。如果您想更简洁,可以放弃module.部分:

exports.trial = function() {
    console.log('trial')
};

(另请注意我添加了缺少的分号。)

然后当然要使用它:

const blah = require('../../../typoo');
blah.trial();

...或该主题的任何变体,例如:

const trial = require('../../../typoo').trial;
trial();

...或

const { trial } = require('../../../typoo');
trial();

还建议通过添加

来使用严格模式而不是默认的宽松模式
"use strict";

到模块的顶部。在严格模式下,分配给未声明的标识符是它应该始终存在的错误。 : - )