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

运行node dist/index.js时报src目录TS文件import语法错误如何解决

问题原因

你的TypeORM、TypeGraphQL配置中,实体(Entities)、解析器(Resolvers)的扫描路径写死了src目录下的.ts文件。当你执行node dist/index.js启动编译后的代码时,运行时会按照配置去读取src目录下的TS源文件,Node本身不支持直接执行TS文件的ESM import语法,就会抛出你遇到的语法错误。
你删除src文件夹后,程序找不到src下的目标文件,会自动匹配到dist目录下编译完成的CommonJS规范的.js文件,因此可以正常启动。

解决方案

  • 1. 修改实体/解析器扫描路径

把你TypeORM配置(代码内配置或ormconfig.json)、TypeGraphQL的buildSchema配置中的路径,改为适配开发+生产环境的写法,示例:

// TypeORM 配置示例
entities: [
  // 开发环境读取src下的TS文件
  process.env.NODE_ENV === 'development' ? 'src/entities/**/*.ts' : '',
  // 生产环境读取dist下的JS文件
  'dist/entities/**/*.js'
].filter(Boolean)

// TypeGraphQL buildSchema 配置示例
const schema = await buildSchema({
  resolvers: [
    process.env.NODE_ENV === 'development' ? 'src/resolvers/**/*.ts' : '',
    'dist/resolvers/**/*.js'
  ].filter(Boolean),
  // 其余配置保持不变
})

如果是用ormconfig.json的静态配置,可以直接写两个路径,程序会自动忽略不存在的路径:

{
  "entities": ["src/entities/**/*.ts", "dist/entities/**/*.js"]
}
  • 2. 优化构建流程(可选)

可以在package.json的build脚本中加入清空旧dist目录的逻辑,避免旧编译文件干扰:
首先安装跨平台删除工具rimraf:

npm install rimraf --save-dev

修改脚本:

{
  "scripts": {
    "build": "rimraf dist && tsc -p ."
  }
}
  • 3. 确认启动时的环境变量

启动生产服务时可以明确指定NODE_ENV为production,避免加载开发环境的配置:

{
  "scripts": {
    "start": "NODE_ENV=production node dist/index.js"
  }
}

Windows环境如果不支持直接设置环境变量,可以安装cross-env工具:

npm install cross-env --save-dev

修改为:

{
  "scripts": {
    "start": "cross-env NODE_ENV=production node dist/index.js"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:36:03