ESModule 动态导入需用 import() 且 URL 必须指向合法 ES 模块(Content-Type: application/javascript),远程模块须支持 CORS 与标准 export/import 语法,否则报错。

ESModule 可以通过 import() 动态导入语法,配合远程 URL 加载模块,但需满足跨域和 MIME 类型等限制。
必须使用 import() 动态导入
静态 import 不支持运行时拼接 URL,只能用动态 import()(返回 Promise):
-
import('./utils.js')—— 支持相对路径、绝对路径、完整 URL -
import('https://cdn.example.com/module.js')—— 直接加载远程模块 - 注意:URL 必须指向一个合法的 ES 模块文件(
Content-Type: application/javascript,且服务器需声明type="module"或响应头含Content-Type: application/javascript)
远程模块需启用 CORS
浏览器会检查响应头,远程模块必须携带合法 CORS 头,否则报错 “Blocked by CORS policy”:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 服务端需返回
Access-Control-Allow-Origin: *或指定域名 - 若模块内又导入其他模块(嵌套 import),所有中间资源也需支持 CORS
- 开发时可用本地服务代理绕过,生产环境必须由服务端配置
模块内容必须是标准 ESModule
远程 JS 文件不能是 IIFE 或 CommonJS,必须用 export / import 语法:
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确:
export const hello = () => 'hi'; - ❌ 错误:
module.exports = {};或define(...)(AMD) - 如使用打包工具(如 Vite、Webpack),需确保输出格式为
es(而非iife或cjs)
常见错误与应对方式
加载失败时通常有明确提示,可针对性处理:
-
Failed to fetch dynamically imported module→ 检查网络、URL 拼写、CORS -
Cannot use import statement outside a module→ 远程脚本被当普通 script 执行,确认响应头Content-Type是application/javascript,且服务支持模块解析 - 建议加
try/catch和 loading 状态管理:try { const mod = await import(url); mod.default(); } catch (e) { console.error('Load failed:', e); }

















