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

Node16下如何强制TypeScript生成带.js后缀的导出/导入?

解决TypeScript编译ESM时自动添加.js后缀的问题

要让TypeScript自动为ESM模块的导入/导出语句添加.js后缀,你需要调整tsconfig.json的配置,适配Node.js的ESM模块解析规则:

  • 修改module和moduleResolution配置项为NodeNext(或Node16,两者功能一致,NodeNext是更通用的命名)
  • 确保package.json中"type": "module"的配置保持不变

具体配置修改示例

将你的tsconfig.json调整为如下内容:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "outDir": "./lib",
    // 保留你原有的其他配置(如strict、declaration等)
  },
  "include": ["src/**/*"]
}

为什么原配置不生效?

你之前使用的module: ES2020 + moduleResolution: node组合,TypeScript会遵循ES模块的语法标准,但不会自动添加Node.js ESM要求的文件后缀——Node.js的ESM系统强制要求导入路径必须包含完整的文件扩展名(如.js),而旧的node模块解析模式不处理这个后缀补全逻辑。

切换到NodeNext/Node16模式后,TypeScript会完全对齐Node.js的模块解析规则:

  • 对于ESM模块(配合package.json的type: module),编译后的导入/导出语句会自动添加.js后缀
  • 同时支持混合CJS/ESM模块的场景,兼容更多Node.js版本的模块系统

修改配置后重新编译,你的index.js中的导出语句会自动变为:

export { Spig } from './spig.js';

此时Node CLI程序就能正确找到依赖模块,无需手动修改后缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:45:38