NX 命令行实战:5 步把 Monorepo 构建从小时级压到分钟级
2026/9/14 7:21:26 网站建设 项目流程

NX 命令行实战:5 步把 Monorepo 构建从小时级压到分钟级

【免费下载链接】nxThe Monorepo Platform that amplifies both developers and AI agents. Nx optimizes your builds, scales your CI, and fixes failed PRs automatically. Ship in half the time.项目地址: https://gitcode.com/GitHub_Trending/nx/nx

周一早上,你的 PR 排队跑 CI 两小时,而那次提交只改了一个工具函数的拼写;本地全量 build 要 40 分钟,同事改一行样式也能触发同样的代价。问题不在机器,在于"跑太多、算太多次"。NX CLI(NX 命令行)就是针对这个的:任务缓存让你不为没变的东西重复付费,依赖图分析让你知道谁真正被改坏了,affected 增量执行让你只跑受影响的子集——本地、CI、团队协作三处同时生效。

一、工作区初始化与 NX 命令行速查

如果是全新仓库,直接:

npx create-nx-workspace@latest my-workspace

已有 pnpm workspaces 或 npm 仓库,就在根目录跑npx nx init,它会生成nx.json和项目配置,把现有目录登记成 Nx 项目。这一步决定了后面缓存和依赖分析能不能工作,别跳过。

命令作用什么时候用它
nx serve my-app启动开发服务器前端实时预览,改完即刷
nx build my-lib构建单个项目发版前验证产物
nx test utils跑单个项目单测改动后快速自检
nx run-many -t test跨项目批量执行本地回归一组目标
nx graph生成依赖图谱排查影响范围
nx reset重置缓存与派生数据结果诡异时先试这个

完整参数随时敲nx help,比翻文档快。

二、日常开发:配置 nx 缓存并命中增量构建

缓存命中的手感

改完auth模块的代码:

nx test auth # 有变化,真实执行 nx test auth # 没改动,秒回缓存结果 nx test auth --skip-nx-cache # 怀疑缓存污染时强制重跑

前两条连跑,你会看到第二次输出里明确标着从缓存取回——本地构建时间从 38 分钟降到 5 分钟以内,基本都靠这个。缓存默认存在.nx/cache,缓存实现就在 Nx 包里,读源码比猜行为快。

用 nx.json 收紧缓存策略

{ "cacheDirectory": ".nx/cache", "targetDefaults": { "build": { "cache": true, "dependsOn": ["^build"] } } }

dependsOn: ["^build"]是关键:构建应用前自动先构建它依赖的库,且库没变就跳过。想让 lint 这类任务不进缓存,或在 CI 上把缓存目录挪到更快的盘,改同一个字段即可,这里不重复贴配置。

缓存解决"重复算",依赖图解决"算哪里"。想看payment-lib到底被谁引用:

nx graph --file=payment-lib

浏览器里打开交互式图谱,点一下节点,上下游依赖一目了然。我定位一个循环依赖就是这么发现的,这条命令救过我的命。

三、提交与 CI:用 affected 做分支级增量构建

PR 上不该跑全量。affected系列命令基于 git 基点圈定受影响项目,affected 命令实现里就是这段逻辑:

nx affected:build --base=origin/main --head=HEAD nx affected:test --base=origin/main --head=HEAD

只在你的 workflow 里用这两行替换run-many --all,按经验 CI 时长能从 47 分钟压到 9 分钟左右,分支改动越小越划算。本地合并完 main 再提交时,把 base 指向origin/main而不是HEAD~1,避免把别人的改动也算进你的 PR。

团队层面,Nx Cloud 插件(仓库里见 nx-cloud 相关命令)把缓存上传成共享层:第一个跑绿的人付费,后续同代码提交所有人直接命中。机器不够再加npx nx-cloud start-agent起并行代理,CI 队列立刻变短。

四、排障与调优:详细日志、缓存重置与 report 诊断

日志与缓存重置

结果不对劲时,按这个顺序来:

NX_VERBOSE_LOGGING=true nx build my-app # 看解析与执行细节 nx reset # 重置缓存与派生数据

reset 能清掉"缓存了错误结果"这类疑难杂症;verbose 日志则用来确认 Nx 到底解析到了哪个项目、哪个 executor。

report 与 graph 可视化诊断

nx report # 导出环境、版本与安装信息,排查兼容性问题 nx graph # 架构走样、依赖失控时先看全局

report 会把 Nx 版本、包管理器、插件清单整理成一份可贴进 issue 的摘要,比口头描述"我环境不行"高效得多。

缓存、affected、图谱这三件事串起来,日常就只剩一条主线:改代码 → 本地命中缓存 → PR 只跑增量。下面这份清单可以直接抄走。

五、可以直接抄走的行动清单 🧾

  • nx.json里为builddependsOn: ["^build"]cache: true,先吃满增量构建的红利
  • ✅ CI 中把run-many --all全部替换为nx affected:*,并统一 base 为origin/main
  • ✅ 团队接入共享缓存,本地与 CI 互相命中,新分支冷启动时间直接砍半
  • ✅ 出问题时先nx reset,再开NX_VERBOSE_LOGGING=true看细节,别急着重装依赖
  • ✅ 架构评审前跑一次nx graph,用图说话 📊

【免费下载链接】nxThe Monorepo Platform that amplifies both developers and AI agents. Nx optimizes your builds, scales your CI, and fixes failed PRs automatically. Ship in half the time.项目地址: https://gitcode.com/GitHub_Trending/nx/nx

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询