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

如何在Turbo Repo中运行.ts文件?多种尝试均报错

解决Turbo Repo中运行TS迁移文件的报错问题

问题概述

在Turbo Repo monorepo环境下,尝试运行./apps/backend/src/migrations/dbMigrations/index.ts时,三种执行命令均触发报错:

  • 执行ts-node --project tsconfig.json ./src/migrations/dbCollections/index.ts,报错:TypeError: Unknown file extension ".ts" for ...\apps\backend\src\migrations\dbCollections\index.ts
  • 执行node --loader ts-node/esm ./src/migrations/dbCollections/index.ts,报错:Error: ERR_UNSUPPORTED_DIR_IMPORT: ...index.ts
  • 执行npx tsx .\src\migrations\dbCollections\index.ts,报错:SyntaxError: The requested module '@monorepo/code-generator' does not provide an export named 'checkWrapperFieldMetadata'

报错原因拆解

  1. ts-node命令失败:你的apps/backend/tsconfig.json中module设为ESNext,但moduleResolution指定为Node,与base配置的NodeNext冲突,导致ts-node无法正确识别ES模块类型的.ts文件。
  2. node+ts-node/esm命令失败:NodeNext模块模式下,Node.js不允许隐式的目录导入(即不指定入口文件的目录导入),必须明确指向文件或通过目录内的package.json声明入口。
  3. tsx命令失败:Turbo Repo的内部包需要先完成构建,tsx直接运行时会读取源码而非编译后的产物,若内部包的导出未正确配置或未构建,则会出现导出不存在的错误。

分步解决方案

1. 统一TS模块配置

修改apps/backend/tsconfig.json,删除与base配置冲突的字段,保证模块模式一致:

{
  "extends": "../../packages/tsconfig/base.json",
  "compilerOptions": {
    "target": "es2016",
    "experimentalDecorators": true,
    "types": ["node", "express", "vite/client"]
  }
}

若必须自定义module,需同步设置moduleResolution: "NodeNext",确保模块格式与解析逻辑匹配。

2. 修复目录导入问题

针对代码中的目录导入(如import xxx from './some-directory'),二选一处理:

  • 改为明确导入入口文件:import xxx from './some-directory/index.ts'
  • 在目标目录下创建package.json,添加以下内容声明模块入口:
    {
      "type": "module",
      "main": "./index.ts"
    }
    

3. 推荐运行方式(tsx + Turbo前置构建)

tsx对ES模块的支持更完善,结合Turbo构建内部包可解决导出问题:

  1. 在项目根目录构建目标内部包:
    turbo build --filter=@monorepo/code-generator
    
  2. 进入apps/backend目录执行迁移文件:
    npx tsx ./src/migrations/dbCollections/index.ts
    

备选方案:ts-node ES模块模式

若偏好使用ts-node,需调整配置和命令:

  1. 在apps/backend/package.json中添加:
    {
      "type": "module"
    }
    
  2. 执行命令时添加--esm参数:
    ts-node --esm --project tsconfig.json ./src/migrations/dbCollections/index.ts
    

额外检查项

  • 确认内部包@monorepo/code-generator的package.json正确配置了exports字段,示例:
    {
      "exports": {
        ".": "./dist/index.js"
      },
      "type": "module"
    }
    
  • 运行前确保所有依赖(包括内部包)已安装:npm install/pnpm install/yarn install

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:13:14