ES6 模块导入是否执行导入文件中的代码?

新手上路,请多包涵

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 许可协议

阅读 343
2 个回答

一个模块只会被评估一次 ,但 可以在一个项目中安装同一模块的两个副本,在这种情况下,该模块及其中的代码将被执行两次。

考虑以下包结构:

 index.js
package.json
node_modules/
├── package_b/
│   └── node_modules/
│       └── package_a/
|           └── index.js
└── package_c/
    └── node_modules/
        └── package_a/
            └── index.js

如果顶级 index.jspackage_bpackage_c 导入,那么 package_a 将被导入(并因此被评估) _两次_。

大多数人并没有意识到这种行为,但如果他们解决了这个特定问题,则可能需要意识到这一点。

这是一篇关于 understanding-the-npm-dependency-model 的古老但很好的文章,其中进一步详细说明了 npm 如何以及为什么这样做。

原文由 andyhasit 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题