Mocha+TypeScript+ESM环境下.ts文件扩展名未知错误问询
解决Mocha+TypeScript+ESM环境下的
[ERR_UNKNOWN_FILE_EXTENSION]错误 问题根源
你配置的ts-node/register是针对CommonJS模块系统的,但你的项目已经在package.json里设了"type": "module"启用了ESM,两者不兼容,这才导致识别不了.ts文件扩展名。
具体解决步骤
1. 安装适配依赖
先装上ESM专用的ts-node相关依赖,同时确保TypeScript和Mocha的类型文件齐全:
yarn add -D ts-node typescript @types/mocha
2. 修改.mocharc.json配置
把原来的require配置替换成ESM专用的加载器:
{ "extension": ["ts"], "loader": "ts-node/esm", "spec": "test/**/*.ts" }
3. 调整tsconfig.json(关键配置)
让TypeScript输出适配ESM的代码,核心参数要设置正确:
{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ES2020", "esModuleInterop": true, "skipLibCheck": true, "strict": true }, "include": ["test/**/*"] }
4. 运行测试
现在直接执行yarn run mocha就能正常运行测试了,不需要额外加参数。
额外提醒
- 如果测试文件里用了
import/export语法,一定要保证tsconfig.json里的module和moduleResolution配置正确,否则可能出现模块解析失败的问题。 - Node.js 20.x对ESM的支持已经很完善,但要避免在ESM项目里混用
require()加载模块,容易引发冲突。
内容的提问来源于stack exchange,提问作者armijo
相关产品推荐
相关产品推荐

