es modules 的文件后缀和路径写法是解析器识别模块类型与定位资源的关键:node.js 中需用.mjs后缀或package.json设"type":"module";浏览器中import路径必须带.js扩展名且为相对/绝对路径,裸说明符不支持。

ES Modules 的文件后缀名和路径写法不是可选项,而是解析器识别模块类型和定位资源的关键依据。配置不对,直接报错 Cannot use import statement outside a module 或 Module not found。
Node.js 中必须明确标识 ESM 文件
Node 不会根据内容判断模块类型,只看后缀或 package.json 配置:
-
.mjs 后缀:最稳妥方式。只要文件是
index.mjs,Node 默认按 ES 模块加载,无需其他配置 -
.js 后缀 + package.json 设
"type": "module":整个包内所有 .js 文件都走 ESM 解析(注意:不能与 CommonJS 混用) - 不推荐用
--input-type=module启动,仅适合单次脚本调试,不适合项目
浏览器中路径必须带扩展名且为相对/绝对
HTML 中的 <script type="module"></script> 对路径非常严格:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
不能省略扩展名:
import { foo } from './utils'❌ 报错;必须写成import { foo } from './utils.js'✅ -
必须用相对路径(./ 或 ../)或绝对路径(/开头)或完整 URL:
import { bar } from 'lodash'❌ 浏览器原生不支持裸说明符(bare specifier) - 如需使用包名导入,得配合
<script type="importmap"></script>,但目前 Safari 和旧版 Chrome 支持有限,生产环境慎用
路径别名在 ESM 中默认不生效
TypeScript 的 paths 配置(如 @/components)只是编译时提示,运行时无效:
- TS 编译后仍是原始路径,Node 或浏览器照样找不到
- 要真正支持别名,需构建工具介入:Vite、Webpack 自带解析;ts-node 需搭配
tsconfig-paths插件 - 纯 Node 运行(无构建)时,建议统一用相对路径,避免运行时报错
常见错误路径写法及修复
这些写法在 ESM 环境下都会失败:
-
import utils from 'utils'→ 改为import utils from './utils.js'(本地文件)或通过 import map 映射 -
import { helper } from '../lib'→ 必须补全扩展名:import { helper } from '../lib/index.js' -
import('./dynamic')()→ 动态导入同样要带扩展名:import('./dynamic.js')()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










