“cannot use import statement outside a module”错误本质是js引擎未将文件识别为es模块:浏览器需,node.js需package.json中设"type": "module"或用.mjs后缀,且禁止与commonjs混用。

ES Modules 报错不用死记,掌握几类典型错误的特征和修复逻辑,比背速查表更可靠。下面按常见报错现象归类,帮你快速定位和解决。
“Cannot use import statement outside a module”
这是最常遇到的报错,本质是 JS 引擎没把当前文件当模块处理。
- 浏览器中:确保
<script></script>标签加了type="module",例如<script type="module" src="main.js"></script> - Node.js 中:检查
package.json是否有"type": "module";如果没有,要么加它,要么把文件后缀改成.mjs - 注意:CommonJS(
require())和 ESM(import)不能混在同一个文件里
“The requested module ‘xxx’ does not provide an export named ‘yyy’”
导入名和导出名不匹配,通常由拼写、默认/具名导出混淆或重命名错误引起。
- 检查源文件导出方式:
export default xxx对应import xxx from 'mod';export const yyy = ...对应import { yyy } from 'mod' - 用
import * as ns from 'mod'查看全部导出:console.log(ns),确认实际有哪些名称 - 注意大小写敏感,比如
export const MyComponent不能写成import { mycomponent }
“Failed to resolve module specifier ‘xxx’” 或 “404”
路径解析失败,不是语法错,而是模块找不到。
- 浏览器中:相对路径必须带
./或../,不能省略(import 'utils'❌,import './utils.js'✅) - Node.js 中:ESM 不支持自动补
.js或.json后缀,必须写全(import './config.json',不能只写'./config') - 第三方包:确保已安装,且包的
package.json中有"exports"或"main"/"module"字段支持 ESM
“Circular dependency detected” + 后续值为 undefined
两个或多个模块相互 import,ESM 的静态执行顺序导致部分导出还未初始化。
- 典型表现:A 导入 B,B 又导入 A,但 A 中使用 B 的变量时是
undefined - 临时缓解:把部分导入移到函数内(动态
import()),避开顶层循环 - 根本解法:拆分共享逻辑到第三个模块,或改用导出函数而非裸值(函数调用可延迟执行)
理解每类错误背后的模块加载机制,比硬记报错文本更有效。遇到新报错时,先看关键词(如 “module”、“export”、“resolve”),再对应到这几类场景,基本能快速切入。











