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

依赖管理深入专题

专题说明

本专题深入探讨NPM依赖管理的进阶知识,包括peerDependencies对等依赖机制、npm ci精确安装、两种安装命令的差异对比以及overrides强制覆盖版本。

学习目标

  1. 理解peerDependencies的宿主依赖声明与版本兼容机制
  2. 掌握npm ci基于lock文件的精确安装流程
  3. 能正确区分npm install与npm ci的适用场景
  4. 学会使用overrides解决深层依赖版本冲突

学习内容

  • peerDependencies:插件型包依赖声明、版本兼容与警告
  • npm ci:基于lock文件快速安装、团队一致性保证
  • install vs ci:行为差异、适用场景对比
  • overrides:强制覆盖版本、深层依赖版本问题解决

学习建议

  1. CI/CD环境中始终使用npm ci确保依赖一致性
  2. peerDependencies是开发插件/库时的必备知识
  3. overrides应谨慎使用,仅在确有必要时强制覆盖

📝 配套习题(15 题)

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

npm install和npm ci在执行时都会更新package-lock.json文件。

A

B

2

package.json中的overrides字段可以覆盖项目中任意深度的依赖版本,包括直接依赖和间接依赖。

A

B

3

npm ci命令在执行时,如果项目中不存在package-lock.json文件,它会自动生成一个新的锁文件后再进行安装。

A

B

单选题
4

在npm v8.3引入overrides之前,开发者通常使用什么方式来解决间接依赖版本冲突问题?

A

使用dependencies直接声明间接依赖的版本

B

使用resolutions字段(需配合yarn)

C

使用npm shrinkwrap锁定版本

D

手动修改node_modules中的文件

5

npm ci在安装依赖之前会执行什么操作?

A

备份现有的node_modules目录为node_modules.bak

B

删除现有的node_modules目录

C

检查node_modules是否与lock文件一致,不一致才删除

D

仅删除node_modules中与lock文件不匹配的包

6

在npm v7+中,当安装一个包含peerDependencies的包时,如果宿主项目中没有安装对应的peer依赖,npm会如何处理?

A

自动以peerDependencies中声明的版本范围安装peer依赖

B

完全忽略peerDependencies,不发出任何提示

C

仅在npm install时输出警告,但不会自动安装peer依赖

D

抛出错误并中止安装过程

7

以下哪项是npm install与npm ci的核心区别?

A

npm install只能安装生产依赖,npm ci可以安装所有依赖

B

npm install进行增量更新,npm ci先删除node_modules再全新安装

C

npm install需要网络连接,npm ci可以离线安装

D

npm install只读取package.json,npm ci只读取package-lock.json

多选题
8

关于npm install与npm ci的区别,以下说法正确的是哪些?

A

npm install可以指定安装单个包,npm ci不能

B

npm ci的安装速度通常比npm install更快

C

npm install可能产生不确定的安装结果,npm ci确保结果确定

D

npm ci适合在开发环境中日常添加依赖使用

E

npm ci不会修改package-lock.json,而npm install可能会

9

以下关于npm ci命令的特点,正确的是哪些?

A

安装速度通常比npm install更快

B

安装结果严格依据package-lock.json,不会修改package.json

C

如果package.json与package-lock.json不一致,npm ci会报错退出

D

npm ci可以用来安装单个新包

E

适合在CI/CD流水线中使用以确保构建可重复性

10

关于peerDependencies,以下说法正确的是哪些?

A

peerDependencies中的包不会被自动安装到node_modules中(npm v6及之前)

B

peerDependencies通常用于插件与宿主框架之间的版本约定,如ESLint插件与ESLint

C

在npm v7+中,peer依赖缺失会导致ERESOLVE错误

D

peerDependencies中的包会被打包进发布后的依赖树

E

可以使用peerDependenciesMeta将某个peer依赖标记为可选

11

关于overrides字段的使用,以下说法正确的是哪些?

A

overrides可以覆盖直接依赖的版本

B

overrides支持使用"."作为当前包的标识来覆盖任意依赖

C

overrides可以针对特定的依赖路径进行精确覆盖

D

overrides覆盖后不需要重新执行npm install

E

overrides的优先级高于package-lock.json中的版本记录

填空题
12

npm ci命令要求package-lock.json中的依赖版本必须与____________中声明的版本范围兼容。如果两者不一致,npm ci会____________而非自动更新lock文件。

13

在日常开发中添加新依赖应使用____________命令,而在CI/CD流水线中确保可重复构建应使用____________命令。

14

在package.json中,若要将peerDependencies中的某个依赖标记为可选,需要使用____________字段,在该字段中将对应依赖名设置为{"optional": ____________}。而在npm v7+中,若要跳过peer依赖的严格解析以避免ERESOLVE错误,可以使用____标志执行安装。

15

overrides字段是从npm ____________版本开始引入的,其功能类似于yarn中的____________字段。

参考答案
1.错误 2.正确 3.错误 4.B 5.B 6.A 7.B 8.A;B;C;E 9.A;B;C;E 10.A;B;C;E 11.A;B;C;E 12.package.json;报错退出 13.npm install;npm ci 14.peerDependenciesMeta;--legacy-peer-deps 15.v8.3;resolutions
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 依赖管理基础专题
下一个专题 → 包开发与发布进阶专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码