如何卸载 npm 包?
卸载本地包:npm uninstall 包名(默认保存配置下从 package.json 移除);全局包加 -g;多个包空格分隔一次卸载。卸载后检查 lock 文件,通常无需再跑 npm prune。
npm uninstall <包名>——从 node_modules 删除并同步更新 package.json。
常用命令
# 卸载项目依赖(同时从 dependencies 中移除声明)
npm uninstall lodash
# 卸载开发依赖(从 devDependencies 移除)
npm uninstall jest
# 卸载全局包
npm uninstall -g typescript
# 一次卸多个
npm uninstall lodash moment dayjs
卸载后的检查
npm ls --depth=0 # 确认顶层依赖里没有了
# npm uninstall 后通常不需要额外 prune
默认保存配置下,npm uninstall 会更新 package.json 和已有 package-lock.json;--no-save 不更新这些声明文件。workspaces 项目应对拥有该依赖的 workspace 操作,例如 npm uninstall lodash -w app。如果你用了 Git,这两个文件的变化要一起提交,否则团队成员 npm install 时包又会被装回来。
相关但不相同的操作
| 想做的事 | 命令 |
|---|---|
| 卸载某个包 | npm uninstall 包名 |
| 清空全部重装 | npm ci(已有且匹配的 lockfile) |
| 清理未声明的包 | npm prune |
| 检查 npm 缓存 | npm cache verify(卸载通常不需要清缓存) |
常见问题(FAQ)
Q:卸载了包,代码里还有 require 它的地方会怎样?
若模块无法解析,运行到该处会报找不到模块;同名包若仍作为传递依赖被提升,可能暂时可解析,但不能依赖这种偶然情况。卸载前先全局搜索 import/require 引用:grep -r "包名" src/。
Q:uninstall 后 node_modules 里还有它的子依赖吗?
可能被其他包共享的子依赖会保留;只被它独占的子依赖会一并移除。npm ls 可以验证。
Q:和手动删 node_modules 里的文件夹有什么区别?
手动删不同步 package.json/lock 文件,下次 npm install 又会装回来。永远用 npm uninstall。