运行npm start时index.mts文件出现ERR_UNKNOWN_FILE_EXTENSION错误
解决Node.js中.mts文件未知扩展名错误
问题详情
运行TypeScript项目时遇到以下错误:
node:internal/errors:490 ErrorCaptureStackTrace(err); ^ TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".mts" for /Users/CMO/Desktop/ts-course/l09-final/index.mts at new NodeError (node:internal/errors:399:5) at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:99:9) at defaultGetFormat (node:internal/modules/esm/get_format:139:38) at defaultLoad (node:internal/modules/esm/load:83:20) at DefaultModuleLoader.load (node:internal/modules/esm/loader:319:26) at DefaultModuleLoader.moduleProvider (node:internal/modules/esm/loader:194:22) at new ModuleJob (node:internal/modules/esm/module_job:63:26) at #createModuleJob (node:internal/modules/esm/loader:218:17) at DefaultModuleLoader.getJobFromResolveResult (node:internal/modules/esm/loader:171:34) at DefaultModuleLoader.getModuleJob (node:internal/modules/esm/loader:156:17) { code: 'ERR_UNKNOWN_FILE_EXTENSION' }
Node.js版本:v20.0.0
当前package.json配置:
{ "name": "final-project", "version": "1.0.0", "description": "Testing TypeScript code", "main": "index.mts", "type": "module", "scripts": { "start": "tsc && node index.mts" }, "dependencies": { "moment": "^2.29.4", "randomstring": "^1.2.3" }, "devDependencies": { "@types/randomstring": "^1.1.8", "typescript": "^5.0.4" } }
错误原因
Node.js无法直接解析.mts(TypeScript ES模块)文件,你当前的脚本先执行tsc编译,但之后直接运行了未编译的TypeScript源文件,而非编译后的JavaScript文件,导致报错。
解决方案
方案一:运行编译后的JavaScript文件
- 确保存在
tsconfig.json文件,配置编译输出ES模块:{ "compilerOptions": { "module": "ESNext", "target": "ES2020", "outDir": "./dist", // 指定编译文件输出目录 "strict": true }, "include": ["index.mts"] // 要编译的文件 } - 修改package.json的
start脚本,指向编译后的.mjs文件:
TypeScript会将"scripts": { "start": "tsc && node dist/index.mjs" }.mts文件编译为.mjs(ES模块格式),存放在dist目录下,直接运行这个文件即可。
方案二:用ts-node直接运行.mts文件
如果不想手动处理编译步骤,可以用ts-node工具直接运行TypeScript文件:
- 安装依赖:
npm install -D ts-node @types/node - 修改package.json的
start脚本:
ts-node会在运行时自动编译TypeScript文件,无需手动执行"scripts": { "start": "ts-node index.mts" }tsc。
额外注意
- 保留package.json中的
"type": "module"配置,确保项目以ES模块模式运行。 - Node.js v20对ES模块支持完善,但仍需工具处理TypeScript编译逻辑,无法直接运行.ts/.mts源文件。
内容的提问来源于stack exchange,提问作者Courtney
相关产品推荐
相关产品推荐

