怎么卸载本地packages —— How to Uninstall Local Packages
原文
本章的内容有些过时,本人就说一下最新的npm卸载的特性。
旧的
1. 卸载
命令
npm [un|uninstall] pkg [-S|--save|-D|--save-dev]
例如
npm uninstall lodash
在上面的例子中会从node_modules
中删除lodash
这个package,但是在package.json文件中相应的依赖不会删除该信息。
例如此时的package.json里面的相应内容是:
...
"dependencies""{
"lodash":"4.17.5",
}
...
所以需要下一步同步package.json跟node_modules的信息。
具体做法是使用npm uninstall pkg
命令时加上后面的flags。如果开发依赖则加上--save-dev
,如果是产品应用依赖则加上--save
。
但是这个会导致一些无关痛痒不完美的问题。比如说有个dependencies的package,你开发完后实际上没有使用到这个package,然后你给卸载了。
同时你们这个项目是多人开发的,旧版的话除非你手动去同步,不然别人的node_modules中仍然保留该package。
那么在最终打包项目时可能造成体积不一样,而且这种不必要的冲突也得需要进行沟通才能解决。
因此在npm后来的卸载机制中会直接同步package.json,把相关package从package.json中的dependencies或者Devdependencies中删除。
2. 新版npm卸载机制
在新版的npm uninstall pkg
命令中无论加不加–save或者–save-dev flags都会从package.json中删除相应的依赖信息。
该方法跟yarn remove是一样的。
如果非要保留的话可以在执行卸载命令时加上--no-save
flag。
然而yarn是没有该flag,是无论怎样删除都会同步package.json。
这样做的目的主要是在团队合作开发时避免上述的一点问题。
3.手动修改package.json的依赖。
当手动把package从package.json中删除后,同步node_modules的方式有两个。
npm prune
该方法是修剪node_modules中的那些在package.json中不存在的package。
npm install
该命令是下载package.json中指定的依赖,相当于重置node_modules。也会把package.json中不存在的package给清除掉。
4.–no-save问题
因为现在的npm在package.json的文件附近伴生一个package-lock.json文件用来记录项目和依赖的信息。
当你结合–no-save和npm prune
使用时会收到不是预想的结果。
这时的解决方法是,先执行npm install
然后在执行npm prune
。
5. 注意点
由于很多国内的开发者使用cnpm
也有很多团队使用yarn
。
单独使用这些是没问题的,但是它们是不兼容的,所以混合使用是项目的开发出现问题。
所以尽量单独使用一种工具。
如果出现问题了,最简单最笨的方法是,删除node_modules/,然后npm|cnpm|yarn install
来重新下载。