必须显式声明type="module",否则import/export报错;路径需带扩展名且区分大小写;本地开发须启用http服务;模块间作用域隔离,变量不共享。

type="module"必须显式声明,否则import/export直接报错
写了import却没加type="module",浏览器就当普通脚本执行,必然抛Cannot use import statement outside a module。这个错误不是语法问题,是执行环境没切换。
-
<script src="main.js"></script>里有import?不行,必须改成<script type="module" src="main.js"></script> - 内联写
<script type="module">import './a.js'</script>可以,但不能同时带src属性——<script type="module" src="a.js">console.log(1)</script>里console.log(1)会被完全忽略 - 多个模块文件(比如
a.js、b.js)各自都要被type="module"加载,模块行为不会“传染”
路径必须带扩展名且前缀明确,./和/不能省
ES模块的路径解析是静态的,浏览器不补.js,也不猜你是想导入utils.js还是utils.mjs。错一个字符、少一个点,就Failed to resolve module specifier。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
-
import { foo } from './utils.js'✅ —— 相对路径,显式后缀 -
import { foo } from '/src/lib.js'✅ —— 绝对路径,从站点根目录起算 -
import { foo } from './utils'❌ —— 缺后缀,直接失败 -
import { foo } from 'lodash'❌ —— 裸包名,原生不支持,除非配了<script type="importmap"></script> - 大小写敏感:
Utils.js≠utils.js(尤其在 macOS/Linux 下)
本地开发必须跑 HTTP 服务,file:// 协议下 import 必挂
双击打开 HTML 文件?Chrome、Firefox、Safari 全部拦截模块加载,控制台只报模糊的 CORS 错误,甚至没网络请求发出。这不是配置问题,是浏览器硬性策略。
- 必须启动 HTTP 服务:用
npx serve、python3 -m http.server 8000、VS Code 的 Live Server 插件都行 -
file:///path/to/index.html下所有import都会静默失败,连404都看不到 - 跨域模块(如 CDN 上的
https://cdn.jsdelivr.net/npm/lodash-es@4/index.js)要求响应头含Access-Control-Allow-Origin: *,否则照样 CORS
多个type="module"脚本之间变量不共享,别指望全局挂载
每个<script type="module" src="a.js"></script>和<script type="module" src="b.js"></script>是独立作用域。你在a.js里写const api = 'https://api.example.com',b.js里直接用api就是ReferenceError。
- 顶层声明不会上挂
window,document.currentScript在模块里始终是null - 要复用逻辑,必须走标准导出/导入:
a.js里export const api = '...',b.js里import { api } from './a.js' - 老项目大量依赖
window.utils?别硬塞进type="module",先封装成export,再统一重构导入链
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










