在 package.json 中,依赖项通过顶层的 dependencies 和 devdependencies 字段定义,键为包名,值为语义化版本范围字符串。使用 npm install 安装时,生产依赖写入前者,开发工具写入后者,执行 npm ci 或 npm install --production 可控制是否加载开发依赖。

如何指定精确版本与兼容范围
版本号前的符号决定了 npm 解析范围的严格程度,直接决定安装时的实际包版本。使用 = 锁定确切版本,使用 ^ 允许小版本更新,使用 ~ 仅允许补丁更新,省略符号则默认等同于 ^。

{
"name": "demo-app",
"version": "1.0.0",
"dependencies": {
"express": "4.18.2",
"lodash": "^4.17.21",
"debug": "~4.3.4"
},
"devDependencies": {
"jest": "^29.0.0"
}
}
上述配置中,express 将固定安装 4.18.2;lodash 会安装 4.17.21 及之后所有 4.x.x 的最新版本;debug 限制在 4.3.x 范围内;jest 允许升级至 30.0.0 之前的任何版本。运行 npm install 后,package-lock.json 会记录实际解析出的具体版本号。
立即学习“Java免费学习笔记(深入)”;
如何处理 peerDependencies 与冲突
当库需要特定版本的宿主环境时,需使用 peerDependencies 声明约束。npm 7+ 会自动尝试安装匹配的 peer 依赖,若冲突则报错,开发者需在项目中显式安装满足条件的版本以解决矛盾。

{
"name": "my-ui-component",
"version": "2.0.0",
"peerDependencies": {
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
"devDependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0"
}
}
在此示例中,my-ui-component 要求宿主项目必须提供 react 和 react-dom 的 18.x 版本。如果宿主项目安装了 react@17,npm 会抛出警告或错误。通过在 devDependencies 中声明相同版本,确保在开发该组件库时能正确构建和测试,同时不将其打包进最终发布产物。
移除未使用的依赖项
随着项目迭代,package.json 中可能残留不再使用的依赖。手动清理容易出错,可使用 npm-check 等工具扫描实际代码中的 require 或 import 语句,对比 dependencies 列表,识别并安全移除冗余包。


















