Import Map 演示 - 浏览器端模块映射实验
Import Map 演示实验室
在浏览器中直接使用裸模块标识符(Bare Module Specifiers),无需打包工具。编辑 Import Map 映射和模块代码,实时预览执行结果。
快速预设
Import Map JSON
模块代码 (JavaScript)
实时预览
(渲染结果)
控制台输出
(console.log / error)
等待执行...点击上方 "执行代码" 按钮开始实验。
当前生成的 HTML 文档结构
常见问题与知识点
什么是 Import Map?
Import Map 是一个 Web 标准,允许在浏览器中通过
<script type="importmap"> 标签定义模块标识符到 URL 的映射关系。它让开发者可以直接使用 import React from 'react' 这样的裸模块标识符,而无需通过打包工具解析。浏览器会根据 Import Map 将裸标识符转换为完整的 URL 进行加载。哪些浏览器支持 Import Map?
Import Map 已被所有现代浏览器支持,包括 Chrome 89+、Edge 89+、Firefox 108+、Safari 16.4+。截至 2024 年,覆盖率达到 93%+ 的全球用户。对于不支持的旧浏览器,可以使用 es-module-shims 作为 polyfill。
Import Map 的 imports 和 scopes 有什么区别?
imports:全局映射,适用于所有模块。例如将
scopes:作用域映射,仅对特定路径下的模块生效。例如可以为
"react" 映射到 CDN 地址。scopes:作用域映射,仅对特定路径下的模块生效。例如可以为
/admin/ 路径下的模块使用不同版本的依赖,实现精细化的依赖管理。一个页面可以定义多个 Import Map 吗?
不可以。每个 HTML 文档只能有一个
<script type="importmap"> 标签。如果定义了多个,后面的会完全覆盖前面的。如果需要合并多个映射,必须在同一个 Import Map JSON 中完成所有配置。Import Map 可以动态修改吗?
一旦页面中的模块开始加载,Import Map 就无法再被修改。它必须在任何
<script type="module"> 标签之前定义。如果需要动态切换映射,必须在模块加载之前通过 JavaScript 创建 importmap 脚本元素(但这种方法在不同浏览器中行为可能不一致,不推荐用于生产环境)。使用 Import Map 还需要打包工具吗?
Import Map 可以减少对打包工具的依赖,但不能完全替代。对于小型项目和原型开发,Import Map + CDN 是非常高效的方案。但在生产环境中,打包工具仍然提供 Tree Shaking、代码压缩、CSS 处理、静态资源优化等 Import Map 不具备的能力。两者可以配合使用——打包工具处理应用代码,Import Map 管理外部依赖。
常见的模块 CDN 有哪些推荐?
esm.sh:专为 ES Modules 设计,自动处理 CJS 转 ESM,支持 TypeScript。
unpkg:从 npm 直接提供文件,适合加载已包含 ESM 构建的包。
jsDelivr:全球 CDN,速度优秀,支持 ESM 格式。
Skypack:已停止维护,但部分包仍可使用。推荐迁移至 esm.sh。
unpkg:从 npm 直接提供文件,适合加载已包含 ESM 构建的包。
jsDelivr:全球 CDN,速度优秀,支持 ESM 格式。
Skypack:已停止维护,但部分包仍可使用。推荐迁移至 esm.sh。
遇到 "Failed to resolve module specifier" 错误怎么办?
这个错误表示浏览器无法解析模块标识符。常见原因:① Import Map 中缺少对应的映射;② 映射的 URL 地址不正确或资源不可用;③ 模块标识符拼写错误(区分大小写);④ CDN 服务暂时不可达。可以先在本工具中测试映射是否有效。
UD5工具箱