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

运行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文件

  1. 确保存在tsconfig.json文件,配置编译输出ES模块:
    {
      "compilerOptions": {
        "module": "ESNext",
        "target": "ES2020",
        "outDir": "./dist", // 指定编译文件输出目录
        "strict": true
      },
      "include": ["index.mts"] // 要编译的文件
    }
    
  2. 修改package.json的start脚本,指向编译后的.mjs文件:
    "scripts": {
        "start": "tsc && node dist/index.mjs"
    }
    
    TypeScript会将.mts文件编译为.mjs(ES模块格式),存放在dist目录下,直接运行这个文件即可。

方案二:用ts-node直接运行.mts文件

如果不想手动处理编译步骤,可以用ts-node工具直接运行TypeScript文件:

  1. 安装依赖:
    npm install -D ts-node @types/node
    
  2. 修改package.json的start脚本:
    "scripts": {
        "start": "ts-node index.mts"
    }
    
    ts-node会在运行时自动编译TypeScript文件,无需手动执行tsc。

额外注意

  • 保留package.json中的"type": "module"配置,确保项目以ES模块模式运行。
  • Node.js v20对ES模块支持完善,但仍需工具处理TypeScript编译逻辑,无法直接运行.ts/.mts源文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:23:15