<script type="importmap"> 是 HTML 原生支持的声明式模块映射配置,用于将裸模块名(如 "react")映射到实际 URL,解决浏览器无法解析 import React from "react" 等裸导入的问题;它必须置于 <head> 中、所有 type="module" 脚本之前,内容为合法 JSON,仅支持 imports 字段,且依赖现代浏览器支持(Chrome 89+、Firefox 109+、Safari 16.4+ 等)。
script type="importmap,它能解决什么问题裸模块(bare import)指像 import React from "react" 这样不带协议、不带扩展名、也不以 ./ 或 / 开头的导入路径。浏览器原生不支持直接解析这种写法——会报 Failed to resolve module specifier "react" 错误。script type="importmap" 就是为了解决这个问题:它在 HTML 中声明一个 JSON 格式的映射表,把裸模块名“重定向”到真实可加载的 URL(比如 CDN 地址)。
importmap 块必须放在 <head> 中,且只能有一个;内容是标准 JSON,不能有注释、尾逗号或变量插值;imports 是唯一必需字段,键是裸模块名,值是绝对 URL 或相对 URL(相对于当前 HTML 页面)。
<script type="importmap">{ "imports": { "react": "https://esm.sh/[email protected]", "react-dom": "https://esm.sh/[email protected]", "lodash": "https://cdn.skypack.dev/[email protected]" }}</script>
http://localhost),HTTP 协议会被浏览器拒绝@18.2.0),避免 CDN 缓存或上游变更导致行为突变./node_modules/... 这类路径——importmap 不读取本地文件系统https://esm.sh/ 或 https://cdn.skypack.dev/ 返回的模块),才能被 import 正常执行import 语句仍报错?常见兼容性陷阱即使 importmap 写对了,import 也可能失败。核心原因是:支持 importmap 的浏览器有限,且需配合模块脚本使用。
<script> 标签必须带 type="module",否则 import 语法不生效,且不会触发 importmap 解析Content-Type: application/javascript + 导出声明),例如 https://unpkg.com/[email protected]/umd/react.development.js 是 UMD,不能直接 import
importmap 上下文,导致后续导入失败importmap 是否生效最直接的方式是在 DevTools 控制台运行 console.log(importMap)(注意不是全局变量,而是通过 document.querySelector('script[type="importmap"]') 解析后查看);更可靠的是检查网络请求和错误信息。
立即学习“前端免费学习笔记(深入)”;
importmap 中配置的一致TypeError: Failed to resolve module specifier "xxx",先检查该模块名是否拼写一致(大小写敏感)、是否漏写 type="module"
curl -I https://esm.sh/[email protected] 确认 CDN 返回状态码是 200,且 Content-Type 包含 javascript
importmap:第二个会被忽略,且无任何警告裸模块映射本身很简单,但真正卡住人的往往是 CDN 选型、浏览器支持边界和模块格式兼容性——这些地方没对齐,importmap 就只是个 JSON 字符串。