全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 13 道配套习题

Monorepo与工作区管理专题

专题说明

本专题讲解使用npm workspaces管理Monorepo多包项目,包括工作区配置、内部依赖管理、共享依赖提升以及批量脚本执行。

学习目标

  1. 掌握workspaces字段定义多包项目结构
  2. 理解工作区内部依赖管理与共享依赖版本同步
  3. 学会在所有或指定工作区中批量运行脚本

学习内容

  • workspaces配置:多包项目结构定义、路径配置
  • 工作区依赖管理:内部依赖、共享依赖、版本同步
  • 脚本批量执行:--workspace参数、选择性执行

学习建议

  1. Monorepo适合多个关联包同时开发的场景
  2. 共享依赖会被提升到根node_modules减少重复安装
  3. 使用npm run -ws在所有工作区同时执行脚本

📝 配套习题(13 题)

💡 参考答案在文末
判断题
1

在workspace依赖中使用"workspace:*"协议,发布包时NPM会自动将其替换为实际发布的版本号。

A

B

2

在npm workspaces中,当工作区pkg-a在dependencies中声明了对同monorepo内工作区pkg-b的依赖时,npm会将pkg-b的发布版本从registry下载到pkg-a的node_modules中,而非使用符号链接指向pkg-b的本地源码。

A

B

3

在package.json中配置"workspaces": ["packages/*"],NPM会将packages目录下所有包含package.json的子目录识别为工作区包。

A

B

4

在npm workspaces中,使用npm run build -ws执行所有工作区包的build脚本时,npm会按照依赖拓扑顺序串行执行,即被依赖的包先构建,依赖它的包后构建。

A

B

单选题
5

在npm workspaces中,以下哪个命令可以仅对包含test脚本的工作区包执行测试,跳过没有test脚本的包?

A

npm test -ws --ignore-missing

B

npm test -ws --if-present

C

npm test -ws --silent

D

npm test -ws --skip-missing

6

在启用了workspaces的项目中执行npm install,NPM对工作区内部依赖的处理方式是?

A

从NPM注册表下载并安装

B

在node_modules中创建指向本地包的符号链接

C

复制本地包代码到node_modules

D

忽略工作区内部依赖

7

为特定工作区包pkg-a安装lodash依赖的正确命令是?

A

npm install lodash -p pkg-a

B

npm install lodash -w pkg-a

C

npm install lodash --workspace=pkg-a

D

npm install lodash @pkg-a

多选题
8

关于npm workspaces的批量脚本执行,以下哪些说法是正确的?

A

使用npm run build -w package-a -w package-b可以为指定的多个工作区包执行build脚本

B

npm run build -ws会并行执行所有工作区包的build脚本

C

使用--parallel参数可以强制所有工作区包的脚本并行执行,忽略依赖拓扑顺序

D

npm run test -ws --if-present会跳过没有test脚本的工作区包

E

在根package.json的scripts中可以使用"workspaces:*"语法来引用所有工作区的脚本

F

npm run build -ws的执行日志会显示每个工作区包的脚本输出前缀,便于区分来源

9

关于npm workspaces配置,以下说法正确的有?

A

workspaces字段可以放在根package.json中

B

支持使用通配符匹配多个子包

C

工作区包之间不能互相依赖

D

可以通过npm init -w创建子包

10

关于npm workspaces依赖管理的说法,以下哪些是正确的?

A

多个工作区共享的依赖会被提升到根node_modules

B

工作区私有依赖只安装在该工作区目录下

C

npm dedpe可以检测并合并重复依赖

D

发布时workspace协议引用会保持不变

填空题
11

在npm workspaces中,根目录package.json的____________字段用于声明工作区路径。执行npm install时,npm会为每个工作区包在根目录的node_modules中创建____________(symlink),使得工作区之间可以直接通过包名互相引用。若需在指定路径创建新的工作区包,可以使用命令____________

12

在npm workspaces中,若要在所有工作区中批量执行lint脚本,需使用命令npm run lint ____________(或简写为____________)。如果某个工作区没有lint脚本而不希望报错退出,可以额外添加____________参数来跳过缺失脚本的工作区。

13

查看项目中所有工作区包及其依赖的命令是____________;将依赖安装到指定工作区pkg-a的参数是____________

参考答案
1.正确 2.错误 3.正确 4.正确 5.B 6.B 7.B 8.A;C;D;F 9.A;B;D 10.A;B;C 11.workspaces;符号链接;npm init -w <workspace-path> 12.--workspaces;-ws;--if-present 13.npm ls -a --depth=0;-w pkg-a
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
下一个专题 → NPM基础概念与环境配置专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码