Monorepo 协作

共 36 题
#

1. Nx Affected 与受影响的命令集在 PR 检查的工程价值

A affected 命令会执行所有项目的所有任务
B Nx affected 沿项目依赖图计算变更影响集,只执行受影响项目及其依赖方的任务,大幅提速 PR 检查 ✓ 正确答案
C affected 不需要基线对比
D 依赖图漏边不影响 affected 正确性
#

2. Git hooks(husky、lint-staged)的提交规范

A pre-commit 中应执行全量测试
B hooks 配置无需入库
C --no-verify 绕过无需任何治理
D husky 管理 Git hooks、lint-staged 只处理暂存文件,配合 commitlint 校验消息格式,形成 pre-commit 快查、CI 全查的分层规范 ✓ 正确答案
#

3. Rush 与 pnpm + Changesets 的取舍

A Rush 与 pnpm+Changesets 是完全相同的方案
B Rush 是集成式治理框架、pnpm+Changesets 是轻量组合式方案,取舍在治理密度、协作流与团队规模 ✓ 正确答案
C pnpm 无法与 Changesets 配合
D Changesets 负责依赖安装
#

4. pnpm workspace 在 Monorepo 包管理与磁盘空间的工程价值

A pnpm monorepo 无法使用单一 lockfile
B pnpm workspace 每个包独立安装完整副本
C workspace:* 会安装 registry 最新版
D pnpm workspace 统一解析共享 lockfile,store 与 hard link 让多包共享依赖只存一份,显著节省磁盘并保证版本一致 ✓ 正确答案
#

5. Nx 在大型 Monorepo 的依赖图分析与 CI 优化的工程价值

A Nx 的缓存与依赖图无关
B Nx 用项目图分析依赖、任务图编排顺序、affected 与任务级缓存(可远程复用)优化大型 monorepo 的 CI ✓ 正确答案
C Nx 每次 CI 都全量构建所有包
D Nx 无法检测循环依赖
#

6. Lerna 5+ 在 Monorepo 包发布与版本管理的现代实践

A Lerna 5+ 负责依赖安装与任务编排
B Lerna 无法使用 conventional commits
C Lerna 5+ 定位为发布与版本管理(fixed/independent),与 pnpm workspaces、Turborepo 各司其职组合使用 ✓ 正确答案
D Lerna 只能用于 npm
#

7. Turborepo 远程缓存(Vercel Cloud 或自部署 Remote Cache)

A Turborepo 按任务输入哈希复用输出,远程缓存让结果跨 CI 共享,Vercel 托管零运维、自部署数据自主,取舍在运维与合规 ✓ 正确答案
B 远程缓存命中无需校验输入声明
C 远程缓存只能存储日志不能存产物
D Turborepo 缓存只能本地使用
#

8. Nx / Turborepo / Lerna 在大型 monorepo 任务编排与缓存的工程价值

A 三者功能完全重叠
B Nx 是框架化平台(依赖图+生成器)、Turborepo 是轻量任务编排与缓存、Lerna 管版本发布,按需求组合选型 ✓ 正确答案
C Turborepo 提供 affected 增量分析
D Nx 没有缓存能力
#

9. Nx 的代码拥有者(CODEOWNERS)与 affected 命令的 CI 加速

A CODEOWNERS 决定构建哪些包
B CODEOWNERS 按路径路由评审、Nx affected 收敛验证范围,两者联动让 PR 的评审面与 CI 验证面都聚焦变更影响域 ✓ 正确答案
C affected 与评审无关
D CODEOWNERS 无法用于 monorepo
#

10. Nx 20 的代码生成与依赖图分析

A Nx 生成器只能创建 React 项目
B Nx 生成器把团队规范固化为脚手架,项目图分析依赖、检测循环与边界约束,实现规范自动化与架构可治理 ✓ 正确答案
C Nx 无法检测循环依赖
D enforce-module-boundaries 只能警告不能拦截
#

11. Turborepo 2 的任务编排与远程缓存

A Turbo 缓存键只包含源码内容
B 远程缓存只能读不能写
C 缓存与 env 声明无关
D turbo.json 的 dependsOn/outputs/env/inputs 决定任务编排与缓存哈希,输入声明不全会导致缓存错误命中或失效 ✓ 正确答案
#

12. Nx 的项目图与受影响任务 在测试与构建产物的协作

A affected:test 只跑被修改包的测试
B Nx 沿依赖图计算受影响的测试与构建范围(含依赖方),任务缓存复用产物,发布链路则用全量验证兜底 ✓ 正确答案
C 构建缓存不参与依赖产物变化
D 受影响分析不能用于构建
#

13. pnpm workspace 与 workspace:* 协议在版本与发布的工程价值

A workspace:* 发布时原样保留在产物中
B workspace 协议只能用于同一个包
C workspace:* 在开发期链接工作区源码、发布时自动转换为 registry 版本范围,需治理发布顺序与依赖环 ✓ 正确答案
D workspace:^ 发布后不转换
#

14. Turborepo 的 turbo.json pipeline 与远程缓存(Vercel Remote Cache)

A pipeline 的 dependsOn 决定并行度,与顺序无关
B turbo.json 的 pipeline 声明任务依赖与输出,远程缓存需 login/link 与 token 接入,输入声明不全会导致错误命中 ✓ 正确答案
C 远程缓存无需认证
D outputs 声明与否不影响缓存正确性
#

15. Changesets 的版本管理与发布

A Changesets 的版本由 CI 随机计算
B Changesets 用变更文件驱动 semver 版本计算与 CHANGELOG 生成,version 与 publish 分离,配合 PR 门禁保证变更可追溯 ✓ 正确答案
C 发布时无需处理包间依赖顺序
D changeset 只用于固定版本模式
#

16. Changesets 在语义化版本与 CHANGELOG 生成的工程应用

A 变更文件不影响版本计算
B CHANGELOG 由人工在发布后补写
C Changesets 按变更文件的 bump 级别计算 semver 并自动生成 CHANGELOG,配合 PR 门禁与 CI 发布闭环治理版本 ✓ 正确答案
D breaking change 无需标记
#

17. pnpm 的 workspace.yaml 与 package.json 的 workspaces 配置边界

A pnpm 只读取 package.json 的 workspaces
B 包级可以自定义工作区范围
C pnpm-workspace.yaml 只能声明 catalog
D pnpm 优先用 pnpm-workspace.yaml 声明工作区(含 catalog 等专属能力),与 package.json workspaces 并存时需保持单一声明源避免漂移 ✓ 正确答案
#

18. Monorepo 中的依赖提升(hoisting)

A 传统扁平提升共享依赖但产生幽灵依赖,pnpm 严格布局以声明为真相,工具链需求用 hoist-pattern 白名单放行 ✓ 正确答案
B pnpm 与 npm 的布局完全相同
C hoisting 只影响安装速度
D 幽灵依赖是良性现象
#

19. pnpm workspace 在大型项目构建链的工程价值

A workspace 依赖与构建顺序无关
B 构建工具无法解析符号链接
C workspace:* 定义包间拓扑让构建顺序自动正确并支持源码级联调,配合统一配置与产物治理保证大型构建链确定 ✓ 正确答案
D 幽灵依赖在 pnpm 下不会暴露
#

20. Turborepo 的 pipeline 配置在跨包构建顺序的工程实践

A outputs 声明与跨包消费无关
B ^build 表示本包构建后才构建依赖包
C pipeline 无法表达任务内顺序
D dependsOn 的 ^ 前缀按依赖拓扑先构建依赖包,outputs 声明产物供上层复用,并需平衡并行度与治理循环依赖 ✓ 正确答案
#

21. Monorepo 的包版本同步策略(syncpack、manypkg)的工程价值

A syncpack 统一依赖版本范围、manypkg 同步本地包引用,配合 CI 门禁从声明层治理 monorepo 版本漂移 ✓ 正确答案
B 版本漂移只影响磁盘空间
C range 风格差异不影响安装结果
D 版本同步工具不需要团队规则
#

22. pnpm 的 peerDependency 严格检查在 Monorepo 的工程协作

A pnpm 严格校验 peerDependencies,Monorepo 中宿主依赖单点提供、库包声明 peer,保证共享框架单实例与版本一致 ✓ 正确答案
B peer 版本不满足只在运行时才报错
C 组件库应把 react 放入 dependencies
D peerDependencies 与 dependencies 无区别
#

23. Monorepo 的代码所有权(CODEOWNERS)与 PR 评审的工程实践

A CODEOWNERS 只适用于单仓库项目
B 未覆盖路径的代码无需评审
C CODEOWNERS 按路径路由评审到包 owner,配合根级兜底与变更影响方提醒,实现 Monorepo 的责任分权与聚焦评审 ✓ 正确答案
D CODEOWNERS 无法与分支保护协作
#

24. Bun 的 workspaces 与 pnpm 在 Monorepo 的工程性能取舍

A Bun workspaces 安装更快但治理(幽灵依赖、版本统一、脚本白名单)弱于 pnpm,按速度优先或治理优先选型 ✓ 正确答案
B Bun 与 pnpm 的依赖布局完全一致
C bun.lock 与 pnpm-lock.yaml 可混用
D Bun 无法运行 Node 项目
#

25. Monorepo 中共享的构建工具(Vite/Rollup 配置)

A 每个包应复制一份完整构建配置
B external 策略与包间依赖无关
C Monorepo 用共享 base 构建配置加包级覆盖,配置作为内部包版本化管理,并统一别名、external 与产物约定 ✓ 正确答案
D 共享配置无法被各包覆盖
#

26. Monorepo 的 Storybook 与组件库发布(changesets)

A Storybook 在 monorepo 中只能有一个实例
B Storybook 提供组件开发预览闭环,changesets 以变更文件驱动组件库版本、CHANGELOG 与发布门禁,并与文档站同步 ✓ 正确答案
C changesets 无法处理组件库依赖联动
D 组件库发布无需变更记录
#

27. Monorepo 的 CI 矩阵(按包变更触发)的工程优化策略

A 按变更检测触发对应包的任务,动态生成矩阵,配合增量、缓存与并行,并用 PR 快速门禁与发布全量门禁分层 ✓ 正确答案
B 矩阵变体越多越好
C 缓存与 CI 优化无关
D CI 每次都应全量跑所有包的完整矩阵
#

28. Monorepo 中的工作流(moon 工具)在缓存与编排的现代应用

A moon 只能配合固定打包器
B moon 与 Turborepo 的功能完全相同
C moon 没有缓存能力
D moon 提供项目图编排、全局缓存(跨项目复用)与工具链管理,与 Turborepo/Nx 在生态、托管缓存与治理深度上取舍 ✓ 正确答案
#

29. Yarn 4(Berry)在 PnP 与 node_modules 模式的工程取舍

A PnP 仍会生成 node_modules 目录
B PnP 会加剧幽灵依赖
C Yarn 4 的 PnP 用 .pnp.cjs 解析器实现零 node_modules、高确定性,但工具链需适配,可用 nodeLinker 切换回 node-modules 模式 ✓ 正确答案
D Yarn 4 不支持 node-modules 模式
#

30. Monorepo 的发布策略(fixed/independent 版本模式)

A fixed 模式整组共享版本号(简单一致但有发布噪音),independent 各包独立版本(精准但需依赖联动),按包耦合度与发布节奏选型 ✓ 正确答案
B independent 模式无需处理包间版本
C fixed 模式下只有变更的包才 bump
D 两种模式不能混合使用
#

31. Turborepo 的 env 白名单与哈希,未声明的环境变量变更为何会导致缓存失效或错误命中,如何设计 env 声明与全局哈希(globalEnv)?

A env 变化不影响 Turbo 缓存
B globalEnv 只影响单个任务
C 任务读取的环境变量未声明会导致缓存错误命中,声明过宽会导致频繁失效,应按最小白名单设计 env 与 globalEnv ✓ 正确答案
D 缓存命中无需验证产物
#

32. Vitest workspace 在 monorepo 的测试配置,projects 划分、共享 setup 文件与跨包依赖的测试隔离如何组织?

A Vitest workspace 按包划分 projects,共享 setup 与测试工具包分发,跨包依赖默认真实链接、按需 mock 实现隔离 ✓ 正确答案
B monorepo 测试必须在根目录单文件配置
C 共享 setup 文件越多越好
D 跨包测试无法并行
#

33. Turborepo 的 --filter 在按包过滤执行的工程应用

A --filter 只能按包名精确匹配
B --filter 与 affected 完全相同
C --filter 支持包名、目录与依赖图方向选择器,用于单包开发与指定包 CI,与变更驱动的 affected 配合,发布前需全量兜底 ✓ 正确答案
D --filter 会扩大执行范围
#

34. Monorepo 的 lockfile 单一管理(pnpm-lock.yaml)的工程价值

A 每个包都应有独立 lockfile
B 单一 lockfile 无法用于 CI
C 根级单一 lockfile 保证全仓依赖一次解析、版本一致与变更集中,需禁止子 lockfile 并保持 package.json 与锁文件同步 ✓ 正确答案
D lockfile 冲突应手工合并
#

35. Monorepo 的 VS Code 工作区设置(.vscode/settings.json)的多根协作

A monorepo 只能打开单个包目录开发
B 编辑器设置与 CI 校验可以不同
C monorepo 无法用 VS Code 调试跨包代码
D 通过 .code-workspace 多根工作区与入库的 settings/extensions/tasks 统一编辑器体验,设置以根级共享、包级覆盖分层 ✓ 正确答案
#

36. Monorepo 的文档站(Docusaurus、VitePress)

A 文档变更无需评审
B 文档应独立仓库维护
C 文档站作为 monorepo 包与代码同仓,内容手写与自动生成结合,版本化与发布联动,保证文档随代码演进 ✓ 正确答案
D 文档站无法与组件库联动