javascript - Javascript 导入/导出依赖项
问题描述
这是问题的缩减代码。
库.js
export var a = ...
export var b = ...
export var c = ... result of call to leaflet API
main1.js
<script src='leaflet.js'></script>
<script type="module"></script>
import {a,b,c} from "../library.js"
.. use a,b,c successfully
...
</script>
main2.js
<script type="module">
import {a,b} from "../library.js"
... loading fails because L (from leaflet.js) not defined
...
</script>
main1.js 正确执行。导入的变量 a、b 和 c 具有预期值。
main2.js 不会运行。我不需要或导入 c,所以我不包含传单 API。然而,加载仍然试图解决 c,不能,并且失败。
为什么在没有特别要求的情况下检查 c?
什么是纯 JavaScript 解决方法/解决方案?(我尝试在 main2.js 中从 leaflet.js 导入 L 但没有成功)
研究表明 NodeJS 或 CommonJS 环境提供了解决方案,但我想要一个纯模块/导入/导出解决方案。
解决方案
这就是您导入某些东西时会发生的情况 -
- 从 './library.js' 导入 {a, b}
- 在当前目录中找到“library.js”
- 执行“library.js”中的所有代码
- 只有当您执行第 3 步时,编译器才会知道从“library.js”返回和公开的内容
- 虽然有一个 tree-shaking 的概念,它可以删除无用的导出以减小你的包大小,这适用于静态导入。
- 要自己验证,请在“library.js”中添加一些“控制台日志”,您可以在导入“library.js”时看到这些日志已执行
- 因此,当 'library.js' 被执行时,它还需要对 var c 进行评估和赋值,因此正在执行传单 API
我能想到的解决方案——
- 让 var c 成为调用传单 API 的函数,而不是函数调用。
- 将 a,b 放在一个文件中,将 c 放在另一个文件中。
参考 -
推荐阅读
- javascript - javascript 简单的 assertEqual 测试运行结果
- arrays - 使用多元素数组的多元素数组填充定义的命名范围
- php - DOMXPath - 如何将元素包装在 HTML 标签中?
- lisp - 在列表中查找原子的位置
- windows - 在 Windows 中映射 Web 目录
- javascript - 将函数作为参数传递给javascript中的迭代函数
- go - 如何编写惯用的构造函数
- machine-learning - 如何提高我的神经网络准确性(说话人识别 - MFCC)
- mysql - 我需要一个万无一失的清单,用于在 Amazon Web Services 上托管已经构建的电子商务网站
- vb.net - 将 Solidworks 工程图另存为带前缀的 PDF 文件