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

NestJS Monorepo:子项目增量构建与独立版本化技术问询

NestJS Monorepo 两个核心问题的解决方案

一、仅构建自上次发布后变更的子项目

方法1:利用Nest CLI集成的Nx影响分析能力

Nest CLI的Monorepo底层基于Nx,自带任务缓存和变更影响分析功能,直接执行以下命令即可只构建受变更影响的子项目:

nx affected:build

默认会对比当前分支与主分支的差异,自动识别出需要构建的子项目。如果需要指定基准版本(比如上次发布的标签),可以加上--base参数:

nx affected:build --base=v1.0.0

方法2:自定义Git diff脚本

如果需要更灵活的控制,可以写脚本通过Git diff识别变更文件,映射到对应子项目后单独构建。比如一个简单的Bash脚本示例:

# 获取上次发布标签后变更的文件
CHANGED_FILES=$(git diff --name-only v1.0.0 HEAD)
# 遍历变更文件,提取所属子项目
for file in $CHANGED_FILES; do
  PROJECT_NAME=$(echo $file | cut -d'/' -f1)
  # 跳过根目录文件
  if [ -d "apps/$PROJECT_NAME" ] || [ -d "libs/$PROJECT_NAME" ]; then
    nest build $PROJECT_NAME
  fi
done

二、实现子项目独立版本化

方法1:子项目单独维护package.json

在每个子项目的目录(apps/xxx或libs/xxx)下创建独立的package.json,定义该子项目的版本、依赖等信息。然后在根目录package.json中配置npm/yarn workspaces:

{
  "workspaces": [
    "apps/*",
    "libs/*"
  ]
}

构建时将子项目的产物和自身的package.json一起打包,发布时直接进入子项目目录执行npm publish即可。

方法2:使用changesets工具管理版本

  1. 安装changesets:
npm install @changesets/cli --save-dev
  1. 初始化配置:
npx changeset init
  1. 每次子项目变更后,执行npx changeset选择变更的子项目并标记版本变更类型(patch/minor/major)。
  2. 执行npx changeset version自动更新所有子项目的版本号及依赖关系。
  3. 最后执行npx changeset publish发布所有变更过的子项目。

这种方式无需给每个子项目单独建package.json,能在根package.json的结构下实现子项目独立版本化,同时自动处理子项目间的依赖版本同步。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:37:07