module.exports 给 undefined 而 print 模块表示它不是 undefined?
module.exports give undefined while print module indicates it's not undefined?
我正在尝试使用 CommonJs 模块,该模块根据 module
和 module.exports
是否未定义有条件地导出变量。我目前遇到的问题是,有时当我使用 import { something } from 'themodule'
时,它会给我未定义的 something
。在查看源代码时,我发现了以下导出条件:
if (typeof module !== 'undefined' && module.exports) {
module.exports = Prism;
}
所以我在文件中添加了一些日志来查看是否满足条件:
console.log('module: ', module, 'module.exports: ', module.exports)
if (typeof module !== 'undefined' && module.exports) {
console.log('module.exports!')
module.exports = Prism;
}
然而这给了我奇怪的输出:
module: { exports: [Getter/Setter] } module.exports: undefined
如您所见,module
日志似乎表明它有一个 exports
属性 但是当单独记录 module.exports
时,它说它是未定义的。这怎么可能 ?有人可以帮助理解为什么需要进行此检查以及为什么有时 module.exports
可以未定义吗?谢谢!
这里有一些几乎不相关的问题。
The issue I'm currently having is that sometimes when I use import { something } from 'themodule' it gives me undefined something
如果您的 import
链中存在循环依赖,就会发生这种情况。如果 a.js 从 b.js 导入,并且 b.js 从 c.js 导入,并且 c.js 从 a.js 导入 - 那么,对于代码 运行 在这些模块的 顶层 中,无法保证 other 模块顶层的代码 运行 已被执行。虽然您可以试验并查看发生了什么,但更好的方法是
- 去掉循环依赖,and/or
- 在您的代码中只有一个入口点,从该入口点调用所有其他有意义的东西,以便下游的循环依赖性不会导致问题 - 让您的下游出口成为 functions ,没有依赖于其他导入的顶级代码。
Which however gives me strange output:
module: { exports: [Getter/Setter] } module.exports: undefined
这意味着:
-
exports
属性 是 getter/setter
- 当您调用 getter 时,它显然 return 编辑了
undefined
。 属性 存在,但调用 getter 不会 return 任何东西。例如
const obj = {
get prop() {
}
};
console.log(obj.hasOwnProperty('prop'));
console.log(obj.prop);
Can someone help understand why this check is needed
检查
if (typeof module !== 'undefined' && module.exports) {
只是检查代码是否在 CommonJS 上下文中执行,如果是,它会将 Prism
分配给导出。
我正在尝试使用 CommonJs 模块,该模块根据 module
和 module.exports
是否未定义有条件地导出变量。我目前遇到的问题是,有时当我使用 import { something } from 'themodule'
时,它会给我未定义的 something
。在查看源代码时,我发现了以下导出条件:
if (typeof module !== 'undefined' && module.exports) {
module.exports = Prism;
}
所以我在文件中添加了一些日志来查看是否满足条件:
console.log('module: ', module, 'module.exports: ', module.exports)
if (typeof module !== 'undefined' && module.exports) {
console.log('module.exports!')
module.exports = Prism;
}
然而这给了我奇怪的输出:
module: { exports: [Getter/Setter] } module.exports: undefined
如您所见,module
日志似乎表明它有一个 exports
属性 但是当单独记录 module.exports
时,它说它是未定义的。这怎么可能 ?有人可以帮助理解为什么需要进行此检查以及为什么有时 module.exports
可以未定义吗?谢谢!
这里有一些几乎不相关的问题。
The issue I'm currently having is that sometimes when I use import { something } from 'themodule' it gives me undefined something
如果您的 import
链中存在循环依赖,就会发生这种情况。如果 a.js 从 b.js 导入,并且 b.js 从 c.js 导入,并且 c.js 从 a.js 导入 - 那么,对于代码 运行 在这些模块的 顶层 中,无法保证 other 模块顶层的代码 运行 已被执行。虽然您可以试验并查看发生了什么,但更好的方法是
- 去掉循环依赖,and/or
- 在您的代码中只有一个入口点,从该入口点调用所有其他有意义的东西,以便下游的循环依赖性不会导致问题 - 让您的下游出口成为 functions ,没有依赖于其他导入的顶级代码。
Which however gives me strange output:
module: { exports: [Getter/Setter] } module.exports: undefined
这意味着:
-
exports
属性 是 getter/setter - 当您调用 getter 时,它显然 return 编辑了
undefined
。 属性 存在,但调用 getter 不会 return 任何东西。例如
const obj = {
get prop() {
}
};
console.log(obj.hasOwnProperty('prop'));
console.log(obj.prop);
Can someone help understand why this check is needed
检查
if (typeof module !== 'undefined' && module.exports) {
只是检查代码是否在 CommonJS 上下文中执行,如果是,它会将 Prism
分配给导出。