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

开发环境下运行TypeScript Monorepo的推荐方案咨询

开发环境下TypeScript Monorepo(Yarn/Lerna)的运行方案咨询

最近我在把一个大型单体npm/TypeScript仓库重构为Yarn/Lerna/TypeScript Monorepo,初期的文件重构和导入更新工作进展顺利,但在开发模式(热重载/监听)运行Monorepo时遇到了棘手问题:所有包之间互相依赖,我希望避免每次代码变更都编译所有包。目前已经用Lerna完成了项目引导和依赖安装,Lerna会自动把包文件夹链接到node_modules,变更能同步到所有依赖仓库,但还需要明确一套标准的开发运行方案。

问题详情

  • 我的Monorepo包含3个服务类包和1个依赖这些包的CLI包
  • 原单体仓库中,我用这条命令运行CLI:
    ts-node --transpiler sucrase/ts-node-plugin --project tsconfig.json --require tsconfig-paths/register bin/cli.ts
    
    该命令能自动编译所需TS文件,执行耗时仅500ms-1s,这个速度我希望能保留。
  • 每个包都有独立的tsconfig文件,并且使用了tsconfig paths配置,我希望保留这个配置,最坏情况下才考虑替换为相对路径。

已尝试的两种方案

方案1:每个包单独运行tsc-watch

  • 配置:为每个包目录启动tsc-watch,将package.json的main字段指向dist/index.js
  • 问题:tsc编译耗时过长——源码编译需要500ms-1s,每个包生成.d.ts文件至少要1.5-2s,加上tspaths替换每个项目还要额外500ms
  • 替代尝试:用babel-watch替换tsc-watch,JS编译速度更快,但不会生成类型文件,无法满足类型检查需求

方案2:沿用原单体仓库的命令运行CLI

  • 思路:直接复用原单体的ts-node命令启动CLI
  • 问题:无法解析嵌套包的tsconfig paths。例如CLI包通过自身tsconfig解析路径后,调用已链接到node_modules的Transpiler包,但Transpiler包自身的路径配置无法被正确识别
  • 副作用:需要放弃tsconfig paths配置,并且要把package.json的main字段指向src/index.ts,这会增加生产构建的复杂度(方案1也存在这个问题)

参考的项目结构(AWS JS SDK Monorepo风格)

packages
    - cli *(依赖transpiler)*
    - transpiler *(依赖common和statements)*
    - statements *(依赖common)*
    - common *(无依赖)*
package.json
tsconfig.json

现咨询开发环境下运行该TypeScript Monorepo的推荐方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:15:38