O with occluded right edge to appear also as a C Web Widget 指南 文档 Toggle darkmode

深入: 部署导入映射

import maps 这样的标准将允许浏览器理解这些类型的导入,而无需转换步骤,这使得我们可以在浏览器中实现版本管理与共享依赖,而不需要 package.json 文件与构建工具。

导入映射

<script type="importmap">
{
  "imports": {
    "vue": "https://cdn.jsdelivr.net/npm/vue@3.2.22/dist/vue.runtime.esm-browser.prod.js",
    "@web-widget/container": "https://cdn.jsdelivr.net/npm/@web-widget/container/dist/esm/main.js",
    "@org/app": "https://cdn.jsdelivr.net/npm/@org/app/dist/esm/main.js"
  }
}
</script>

<web-widget import="@org/app"></web-widget>

<script type="module">
  import '@web-widget/container';
</script>

应用内部裸模块

javascript 项目中的常见做法是使用所谓的“裸模块导入”。这些是 imports 语句,它仅指定包的名称或包内的文件。

例如:

import Vue from 'vue';

使用裸模块加载应用

Web Widget 应用自身也可以和“裸模块”一样,都通过导入映射来管理它,你只需要使用 import 属性代替 src 属性来加载应用。

<web-widget import="@org/app"></web-widget>

Web Widget 容器的 importsrc 属性的不同:import 属性不会自动补全路径,加载器会优先读取它的原始值去加载模块。

解决兼容性问题

system 格式被设计为 esm 的过渡格式,它解决了 esm import maps 浏览器兼容性的问题。由于几乎所有的构建工具都支持输出 system 格式,因此我们推荐在生产环境中使用它,以便未来能够无缝过渡到 Web 标准。

Web Widget 提供了 System loader 插件来支持 system 格式。

<script type="systemjs-importmap">
{
  "imports": {
    "vue": "https://cdn.jsdelivr.net/npm/@org/vue@3.2.22/dist/system/vue.runtime.browser.prod.js",
    "@org/app": "https://cdn.jsdelivr.net/npm/@org/app/dist/system/main.js"
  }
}
</script>

<web-widget type="system" import="@org/app"></web-widget>

<script src="dist/bootstrap.js"></script>
// src/bootstrap.js
import 'systemjs/s.js';
import '@web-widget/container';
import '@web-widget/system-loader';