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

如何编译包含import导入语句的TypeScript代码且不修改原有导入写法

解决方案

你当前配置的核心冲突是package.json设置了"type": "module"(Node会将项目内的.js文件识别为ES模块,要求使用import/export语法),但tsconfig.json配置输出CommonJS规范的代码,同时build脚本写法错误导致tsconfig配置不生效。按以下步骤修改即可实现编译后保留import导入写法,无需手动调整:

1. 修改tsconfig.json配置

把compilerOptions下的module和moduleResolution参数调整为适配ES模块的配置,修改后完整配置如下:

{
    "compilerOptions": {
        "lib": ["ESNext"],
        "module": "ESNext", // 输出ES模块规范代码,保留import写法
        "moduleResolution": "nodenext", // 适配Node.js的ES模块解析规则
        "target": "ESNext",
        "outDir": "dist",
        "sourceMap": true,
        "esModuleInterop": true,
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "allowSyntheticDefaultImports": true,
        "skipLibCheck": true,
        "skipDefaultLibCheck": true,
        "declaration": true,
        "resolveJsonModule": true
    },
    "include": ["src", "Citation"],
    "exclude": ["node_modules"]
}

2. 修改package.json的scripts配置

  • 原有build命令直接指定入口文件会导致tsconfig.json配置完全失效,需去掉入口文件参数
  • ts-node-dev运行ES模块代码需要新增--esm参数
    修改后scripts部分如下:
{
    "scripts": {
        "start": "ts-node-dev --respawn --transpile-only --poll --esm ./src",
        "build": "tsc -w", // 直接调用tsc会自动读取当前目录tsconfig.json配置
        "test": "node dist/index.js --experimental-specifier-resolution=node"
    }
}

3. 代码导入写法适配

ES模块规范要求相对路径导入必须携带完整后缀,你在TS源码中写本地文件导入时,需要补全.js后缀,示例:

// 正确写法,编译后JS会保留该路径无需修改
import { util } from './utils.js'
// 错误写法,缺少后缀会导致编译后JS运行报错
import { util } from './utils'

TS会自动识别对应.ts文件的类型定义,不需要担心后缀写错的问题。

内容的提问来源于stack exchange,提问作者shestakov-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:54:07