Node.js和JavaScript有时会使像我这样的初学者感到困惑。试用摩卡和导出,我在源代码typoo.js中做了一个错字:
module.exports,trial = function() {
console.log('trial')
}
请注意
module.exports,
后的逗号“,”应该是“。”。如果我没有不小心输入逗号。坦白说,我对结果感到满意。它按我的意愿工作,而不是将导出与函数定义分开。逗号怎么会出乎我的意料,但却符合我的意图?
const blah = require('../../../typoo');
trial()
摩卡日志“试用”
最佳答案
在松散模式下分配给未声明的标识符会创建一个全局变量(我称之为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/