dependencies、devDependencies、peerDependencies 和锁文件分别管什么?
先理解原理和示例,再练习完整口述与追问。
回答要点
运行依赖、开发工具、宿主兼容;安装模式不等于打包结果;npm ci 与锁文件;构建阶段和运行阶段区分。
原理拆解
dependencies 通常用于实际运行需要的包,devDependencies 用于开发、测试和构建工具,peerDependencies 表达库对宿主提供依赖的兼容要求。普通开发环境 npm install 通常安装前两类,是否省略受 production、omit 等配置影响。浏览器是否打入某包主要看模块图和构建配置,不只看它位于哪个字段。
锁文件记录解析结果与完整性等信息,npm ci 根据锁文件安装,配置不匹配会报错,适合可复现的流水线。服务端运行需要的 Express/EJS 应保留运行依赖;纯静态部署最终可以只传构建产物,但构建阶段仍需要开发工具。
示例与推演
本项目在服务器只运行 Node 服务时可用 npm ci --omit=dev;若另一个项目还要在服务器执行 Webpack 构建,不能先省略构建工具再期待 build 可用。发布组件库把 React 作为 peer 可表达宿主兼容,避免无意打入重复实例,但实际打包还需 external 等配置配合。
易错点
peer 自动安装策略与 npm 版本相关;锁文件不消除所有平台差异。不能说 devDependencies 永远不会出现在产物中。
参考回答可直接练习口述
我按运行、开发与宿主兼容分类依赖,按安装命令和环境确定实际安装范围,用锁文件与 npm ci 提高复现性。构建阶段需要工具,运行阶段保留真正必需依赖;bundle 是否包含它还要看导入与打包配置。npm 文档