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

Node.js v19移除相关解析选项后,如何运行转译后的TypeScript代码?

Node.js v19+ 运行转译后TypeScript代码的简易方案

当TypeScript转译为JavaScript后(比如routes.ts转成routes.js),代码里用import { router } from './routes'这种省略后缀的导入写法,在Node.js v19+里因为旧的解析选项被移除,直接运行会报错。官方提到的自定义加载器确实繁琐,下面是几个更简单的实用方案:

方案1:让TypeScript自动补全.js后缀

修改tsconfig.json配置,让转译后的JS文件自动带上正确的后缀,完全适配Node.js ES模块规则:

{
  "compilerOptions": {
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "target": "ES2020",
    "outDir": "./dist",
    "esModuleInterop": true,
    "strict": true,
    "skipLibCheck": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

核心是把module和moduleResolution设为NodeNext(或Node16),这样TS会自动把你写的import './routes'转译为JS里的import './routes.js',不用额外参数就能直接运行转译后的代码。

方案2:用tsx直接运行(跳过手动转译)

如果不想先转译再运行,可以用tsx工具直接执行TS代码,它会自动处理模块解析和转译,不用纠结后缀问题:

  1. 安装依赖:npm install -D tsx
  2. 直接运行:npx tsx src/index.ts
    或者在package.json里加启动脚本:
{
  "scripts": {
    "start": "tsx src/index.ts"
  }
}

这种方式适合开发阶段,省掉转译步骤,效率更高。

方案3:切换为CommonJS模块(如果项目允许)

如果项目不需要严格使用ES模块,可以改回CommonJS规范,Node.js对它的模块解析一直支持省略后缀:
修改tsconfig.json:

{
  "compilerOptions": {
    "module": "CommonJS",
    "target": "ES2020",
    "outDir": "./dist"
    // 其他保持原有配置
  }
}

同时把package.json里的type字段删掉(或者设为commonjs),避免ES模块和CommonJS冲突,转译后的代码直接就能运行。

内容的提问来源于stack exchange,提问作者John Tang Boyland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:40:24