js 文件中的代码是否在导入期间运行?如果是,那么是一次还是每次?例如
// a.js
console.log("A");
const a = "a";
export default a;
// b.js
import a from "./a"; // => console logs?
// c.js
import a from "./a"; // => console logs again?
原文由 mbehzad 发布,翻译遵循 CC BY-SA 4.0 许可协议
js 文件中的代码是否在导入期间运行?如果是,那么是一次还是每次?例如
// a.js
console.log("A");
const a = "a";
export default a;
// b.js
import a from "./a"; // => console logs?
// c.js
import a from "./a"; // => console logs again?
原文由 mbehzad 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个模块只会被评估一次 ,但 可以在一个项目中安装同一模块的两个副本,在这种情况下,该模块及其中的代码将被执行两次。
考虑以下包结构:
index.js
package.json
node_modules/
├── package_b/
│ └── node_modules/
│ └── package_a/
| └── index.js
└── package_c/
└── node_modules/
└── package_a/
└── index.js
如果顶级 index.js 从 package_b 和 package_c 导入,那么 package_a 将被导入(并因此被评估) _两次_。
大多数人并没有意识到这种行为,但如果他们解决了这个特定问题,则可能需要意识到这一点。
这是一篇关于 understanding-the-npm-dependency-model 的古老但很好的文章,其中进一步详细说明了 npm 如何以及为什么这样做。
原文由 andyhasit 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.1k 阅读
是的,确实如此,就一次。
请参阅 http://www.ecma-international.org/ecma-262⁄6.0/#sec-abstract-module-records :