importmap 必须写为 type="importmap" 且置于 head 或 body 开头、所有 module 脚本之前;仅接受标准 json,路径须为完整 url 或合法相对路径,目标资源需返回 application/javascript 并含 export。

type="importmap" 必须写对,且只在 <script></script> 标签中生效;错一个字符(比如写成 type="application/importmap" 或漏引号),浏览器就静默忽略,不报错也不映射。
必须放在 里,且早于所有 type="module" 脚本
顺序错了就白配。浏览器按 HTML 解析顺序执行,type="module" 一遇到 import "lodash" 就立刻查映射表——如果此时 type="importmap" 还没解析到,直接抛 Failed to resolve module specifier。
- ✅ 正确位置:
内,或开头但紧贴标签,且在第一个<script type="module"></script>之前 - ❌ 错误位置:放在
前、放在某个type="module"脚本之后、或嵌套在其他标签里 - ⚠️ 注意:不支持
async、defer,它必须同步加载并立即生效
imports 里的路径值只能是完整 URL 或合法相对路径
裸文件名(如 "lodash": "lodash.js")或本地路径(如 "lodash": "node_modules/lodash/index.js")一律失败。浏览器只认三类格式:
- 带协议的完整 URL:
"lodash": "https://esm.sh/lodash@4.17.21" - 以
/开头的绝对路径:"utils": "/js/utils.mjs" - 以
./或../开头的相对路径:"api": "./src/api/client.js"
路径必须指向真实可访问的资源,且该资源响应头需为 Content-Type: application/javascript,脚本本身必须含 export(不能是 UMD 或 IIFE)。
JSON 结构要干净,不能有注释或多余字段
type="importmap" 只接受标准 JSON,任何非规范内容都会导致整个映射块静默失效:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- ❌ 不允许单引号:
'lodash': '...'→ 失效 - ❌ 不允许末尾逗号:
"lodash": "...",→ 失效 - ❌ 不允许注释:
// react→ 失效 - ❌ 不允许顶层嵌套:
{"config": {"imports": {...}}}→ 失效;必须是{"imports": {...}}或{"imports": {}, "scopes": {...}}
键名就是你在 JS 中写的模块标识符,区分大小写,且不能以 / 开头(否则被当作 scope 路径前缀处理)。
用 scopes 精确控制局部导入行为
当不同代码区域需要同一包的不同版本时,scopes 比 imports 更可靠:
- scope 的 key 必须是 URL 路径前缀,且以
/结尾(如"./legacy/": {...}) - 匹配依据是“谁发起 import”,不是“导入谁”——即从
./legacy/main.js里写import "vue"才会命中该 scope 下的映射 - 子路径通配用
*:"lodash/*": "https://cdn.skypack.dev/lodash@4.17.21/*"支持import debounce from "lodash/debounce"
scopes 不支持正则、通配符以外的模式,也不能嵌套或动态计算路径——它完全依赖静态字符串前缀匹配。
最容易被忽略的是:映射生效的前提是目标资源本身是合法 ESM,哪怕 URL 返回 200,只要没 export 或响应头不对,运行时仍卡在 Cannot resolve module。别只盯着 JSON 格式,得连上 DevTools Network 面板看实际加载的脚本内容和响应头。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










