【发布时间】:2020-01-16 04:44:25
【问题描述】:
我不小心在一个打算与浏览器一起使用的 javascript 模块上使用了require()。
模块集this['libraryName'] = ...。
我注意到它实际上工作。
所以,我创建了 2 个文件:
test1.js
console.log( require('./test2.js'))
test2.js
console.log(this === module.exports)
this.SOMETHING = 10
结果?
$ node ./test1.js
true
{ SOMETHING: 10 }
$
我没想到会这样!
true 意味着 module.exports 在全局上下文中与 this 相同。
- 这是新的吗?
- 这是规范的一部分吗?
- 这不是让创建在导入或需要时可以使用的文件变得非常容易吗?
- 如果这可行,为什么我们还要检查
typeof require === 'undefined'?- 年我有没有忘记这么重要的事情?
【问题讨论】:
-
嘿,这很可能是因为 require() 调用了模块缓存,这就是为什么它看起来像是在模拟它是全局的you can read the last paragrap here about it
-
不知道模块缓存和它有什么关系,最后一段无关...
标签: javascript commonjs