pnpm 安装依赖后为什么某些包版本和 package.json 不一致?
我用 pnpm install 装完依赖,发现 node_modules 里有些包的版本跟 package.json 里写的不一样,明明没改过 lock 文件啊?
比如我写的是 "lodash": "^4.17.21",结果装出来是 4.17.20。是不是 pnpm 的解析逻辑和 npm/yarn 不一样?
顺便贴一下我项目里用到的一段 CSS,应该不影响吧:
.button {
background: #007bff;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
transition: background 0.2s;
}
.button:hover {
background: #0056b3;
}
重点来了:
1. 如果某个包有 peer dependencies,pnpm 会尝试安装一个满足所有 peer 要求的版本
2. 你的 lodash 4.17.20 可能是其他依赖要求的,pnpm 选了个能满足所有依赖的版本
3. 用
pnpm why lodash就能看到是哪个包导致了降级顺便说下你的 CSS,虽然和问题无关,但可以优化成这样:
用 CSS 变量和 color-mix 会让主题色维护更方便。
回到 pnpm 问题,如果你想强制版本,可以:
1. 用
pnpm add lodash@4.17.21重新安装2. 或者在 package.json 里去掉 ^ 直接写死版本号
3. 用
pnpm update更新所有依赖