You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CommonJS项目中动态导入ES模块报错的解决方案咨询

解决CommonJS项目导入ES模块的模块找不到问题

错误根源

你遇到的ERR_MODULE_NOT_FOUND错误,核心原因是Node.js对ES模块的导入解析要求必须包含完整的文件扩展名。你的TypeScript编译后生成的main.page.mjs中,导入语句是import { LoginPage } from "./login.page",缺少了.mjs(或.js)后缀,导致Node.js无法定位到对应的模块文件。

解决方案

1. 调整TypeScript编译配置(推荐)

修改tsconfig.json,启用Node.js兼容的ES模块解析规则,让TypeScript自动在编译后的导入语句中添加完整扩展名:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ES2020",
    "moduleResolution": "node16", // 关键配置,启用Node.js 16+的模块解析逻辑
    "outDir": "./dist/page-objects/esm2020/lib",
    "strict": true,
    "declaration": true
  },
  "include": ["src/**/*.ts"]
}

重新编译后,main.page.mjs中的导入会自动变为import { LoginPage } from "./login.page.mjs",Node.js就能正确识别并加载模块。

2. 手动补全导入路径的扩展名(临时方案)

如果不想修改TS配置,可以直接在main.page.ts中补全导入路径的扩展名:

// main.page.ts
import { LoginPage } from "./login.page.js"; // 这里写.js,TS编译后会对应生成正确的.mjs后缀导入

编译后生成的main.page.mjs会保留正确的扩展名,避免模块找不到的问题。

3. 验证CommonJS中的动态导入路径

确认main.cjs中的动态导入相对路径正确:

// main.cjs
const mainPage = new (await import('../../dist/page-objects/esm2020/lib/main.page.mjs')).MainPage(page);

可以通过在main.cjs所在目录执行node -e "console.log(require.resolve('../../dist/page-objects/esm2020/lib/main.page.mjs'))"来验证路径是否有效。

内容的提问来源于stack exchange,提问作者DDana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:31:12