如何安装 npm 包的指定(旧)版本?
安装指定版本:npm install 包名@版本号(如 lodash@4.17.21)。支持 ^、~ 版本范围、latest 标签、甚至 Git 地址。本文汇总版本号写法与锁定技巧。
**语法:npm install <包名>@<版本号>。**例如:
npm install lodash@4.17.21 # 精确安装 4.17.21
版本号写法一览
npm install lodash@4.17.21 # 精确版本
npm install lodash@^4.17.0 # 兼容 4.x 的最新版(默认策略)
npm install lodash@~4.17.0 # 只允许补丁级更新(4.17.x)
npm install lodash@latest # 发布者维护的latest标签,不一定是数值最大版本
npm install lodash@4.17.21 --save-exact # package.json 里也写死精确版本
查看一个包有哪些版本可装:npm view lodash versions。
回退到旧版本的完整姿势
包升级后出问题要回退:
npm install some-package@1.2.3 # 装回旧版
建议同时加 --save-exact(或在 .npmrc 里设 save-exact=true),让 package.json 里记录精确版本而不是 ^ 范围,限制未来依赖解析范围;已有且满足 package.json 的 lockfile 通常会保留已锁版本,并非每次 npm install 都自动升级。
常见问题(FAQ)
Q:package.json 里是 ^4.0.0,装了 4.1.0 想回到 4.0.5 怎么做?
npm install pkg@4.0.5 --save-exact。范围版本号本身不锁定,锁的是 package-lock.json——回退后 lock 文件会同步更新。
Q:为什么装了旧版,npm install 后又变回新版?
检查 lockfile 是否缺失、冲突或与清单不一致,是否执行过 update,以及 npm 配置;^ 范围允许后续解析升级,但不代表有效锁文件会被每次安装忽略。
Q:能直接从 Git 仓库装特定提交吗?
能:npm install user/repo#commit-hash,或 npm install github:user/repo#branch。
Q:装完想验证版本对不对?
npm list 包名 查看实际安装版本。