Node.js 和 JavaScript 有时会让像我这样的初学者感到困惑。尝试用 mocha 和 export,我在源码 typoo.js 中打错了:
module.exports,trial = function() {
console.log('trial')
}
请注意 module.exports,
之后的逗号“,”,本来应该是“.”如果我没有不小心输入了逗号。
坦率地说,我对结果很满意。它按我想要的方式工作,而不是将导出与函数定义分开。 为什么逗号的效果出乎我的意料却符合我的意图?
const blah = require('../../../typoo');
trial()
mocha 记录“试用”
最佳答案
在松散模式下分配给未声明的标识符会创建一个全局变量(我称之为 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";
到模块的顶部。在严格模式下,分配给未声明的标识符是本应出现的错误。 :-)
关于javascript - module.exports 的意外简写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50097911/