如何在NX monorepo中使用ts-node运行单个TypeScript文件?
在NX Monorepo中用ts-node运行单个TypeScript文件的解决方法
方案一:不修改根package.json的type字段(推荐)
这种方式避免影响整个Monorepo的模块系统,仅针对ts-node运行实例做配置:
- 确保目标文件所在应用的
tsconfig.json(例如apps/sanity/tsconfig.json)包含如下关键配置:{ "compilerOptions": { "module": "ESNext", "moduleResolution": "Bundler", "target": "ESNext", "esModuleInterop": true } } - 使用带参数的ts-node命令执行文件:
npx ts-node --esm --project apps/sanity/tsconfig.json apps/sanity/src/sanity.ts--esm:强制ts-node以ES模块模式处理文件--project:指定应用级tsconfig,适配NX的路径别名与编译规则
如果本地模块使用了NX路径别名(如@your-workspace/apps/sanity/utils),需额外安装tsconfig-paths并调整命令:
npx ts-node --esm --project apps/sanity/tsconfig.json -r tsconfig-paths/register apps/sanity/src/sanity.ts
方案二:适配根package.json的type: module模式
若已设置根package.json的"type": "module",需让Node和ts-node兼容ES模块下的.ts扩展名:
- 在项目根目录创建或修改
tsconfig.esm.json,添加如下配置:{ "compilerOptions": { "module": "ESNext", "moduleResolution": "NodeNext", "target": "ESNext", "esModuleInterop": true, "skipLibCheck": true }, "include": ["apps/sanity/src/**/*.ts"] } - 使用带loader参数的命令运行文件:
npx ts-node --loader ts-node/esm --project tsconfig.esm.json apps/sanity/src/sanity.ts
额外注意事项
- 本地模块的相对导入路径要写全(如
./utils而非utils) - 若仍有路径解析问题,检查NX生成的
tsconfig.base.json中的paths配置,确保ts-node通过--project参数能加载到这些规则
内容的提问来源于stack exchange,提问作者user6750100
相关产品推荐
相关产品推荐

