如何在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'
报错原因拆解
- ts-node命令失败:你的
apps/backend/tsconfig.json中module设为ESNext,但moduleResolution指定为Node,与base配置的NodeNext冲突,导致ts-node无法正确识别ES模块类型的.ts文件。 - node+ts-node/esm命令失败:
NodeNext模块模式下,Node.js不允许隐式的目录导入(即不指定入口文件的目录导入),必须明确指向文件或通过目录内的package.json声明入口。 - 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构建内部包可解决导出问题:
- 在项目根目录构建目标内部包:
turbo build --filter=@monorepo/code-generator - 进入
apps/backend目录执行迁移文件:npx tsx ./src/migrations/dbCollections/index.ts
备选方案:ts-node ES模块模式
若偏好使用ts-node,需调整配置和命令:
- 在
apps/backend/package.json中添加:{ "type": "module" } - 执行命令时添加
--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
相关产品推荐
相关产品推荐

