使用没有 Transpiler/Bundler 步骤的 ES6 模块
Using ES6 Modules without a Transpiler/Bundler step
我有兴趣使用一堆 JS 库,而不依赖于基于 npm 的工具和额外的捆绑步骤。
有了浏览器对 ES6 模块的支持,我可以像这样使用模块:
<script type="module">
import Vue from 'https://unpkg.com/vue@2.6.0/dist/vue.esm.browser.min.js';
new Vue({...});
</script>
当所需模块没有任何传递依赖项时,这很好。
但通常,那些来自转译的 ES6 之前世界的模块是这样做的:
import Vue from 'vue'
这似乎在当今的浏览器中不起作用。我缺少某种选项,将模块说明符与某个 URL 相关联,假设作为 <script>
标记的属性。
一个实用的解决方案是返回使用模块的 UMD 构建,这些模块安装到全局命名空间中,并允许我在主 HTML 文件中明确列出所有依赖项。
但我对概念故事很感兴趣。捆绑器工具告诉它,当有本地支持时,它们在将来会过时,但截至目前,浏览器支持非常无用,因为生态系统可能不会始终如一地转向通过相对路径导入模块。
我找到了一个有望填补这一空白的待定扩展:https://github.com/WICG/import-maps
导入映射允许指定短模块说明符和 URL:
之间的映射
<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/vue@2.6.10/dist/vue.esm.browser.js"
}
}
</script>
唯一的缺点是,截至目前,它们仅在最近的 Chrome 74 中受支持,并且隐藏在实验性标志后面:chrome://flags/#enable-built- in-module-infra
对于在 "most" 浏览器中不使用捆绑器的 ES 模块功能,请尝试 es-module-shims
:
这添加了当前导入地图规范的 -shim
变体。可以将其填充到具有基线 ES 模块支持的浏览器上。
我有兴趣使用一堆 JS 库,而不依赖于基于 npm 的工具和额外的捆绑步骤。
有了浏览器对 ES6 模块的支持,我可以像这样使用模块:
<script type="module">
import Vue from 'https://unpkg.com/vue@2.6.0/dist/vue.esm.browser.min.js';
new Vue({...});
</script>
当所需模块没有任何传递依赖项时,这很好。 但通常,那些来自转译的 ES6 之前世界的模块是这样做的:
import Vue from 'vue'
这似乎在当今的浏览器中不起作用。我缺少某种选项,将模块说明符与某个 URL 相关联,假设作为 <script>
标记的属性。
一个实用的解决方案是返回使用模块的 UMD 构建,这些模块安装到全局命名空间中,并允许我在主 HTML 文件中明确列出所有依赖项。
但我对概念故事很感兴趣。捆绑器工具告诉它,当有本地支持时,它们在将来会过时,但截至目前,浏览器支持非常无用,因为生态系统可能不会始终如一地转向通过相对路径导入模块。
我找到了一个有望填补这一空白的待定扩展:https://github.com/WICG/import-maps
导入映射允许指定短模块说明符和 URL:
之间的映射<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/vue@2.6.10/dist/vue.esm.browser.js"
}
}
</script>
唯一的缺点是,截至目前,它们仅在最近的 Chrome 74 中受支持,并且隐藏在实验性标志后面:chrome://flags/#enable-built- in-module-infra
对于在 "most" 浏览器中不使用捆绑器的 ES 模块功能,请尝试 es-module-shims
:
这添加了当前导入地图规范的 -shim
变体。可以将其填充到具有基线 ES 模块支持的浏览器上。