如果我在应用程序根目录中定义了package.json文件并运行npm install -g
,它将安装在package.json中定义的所有依赖项。
但是,这似乎并非相反。
如果我npm uninstall -g
在应用程序根目录中执行此操作,则会引发错误,使我无法通过它传递程序包名称。
这还不应该卸载与我安装的相同的软件包吗?
难道我做错了什么?
如果我在应用程序根目录中定义了package.json文件并运行npm install -g
,它将安装在package.json中定义的所有依赖项。
但是,这似乎并非相反。
如果我npm uninstall -g
在应用程序根目录中执行此操作,则会引发错误,使我无法通过它传递程序包名称。
这还不应该卸载与我安装的相同的软件包吗?
难道我做错了什么?
Answers:
如果使用Bash,只需切换到包含package.json文件的文件夹,然后运行以下命令:
for package in `ls node_modules`; do npm uninstall $package; done;
对于全局安装的软件包,请切换到您的%appdata%/npm
文件夹(如果在Windows上)并运行相同的命令。
编辑:此命令中断与npm 3.3.6(节点5.0)。我现在使用以下Bash命令,该命令已映射到我的.bashrc文件中的npm_uninstall_all:
npm uninstall `ls -1 node_modules | tr '/\n' ' '`
增加奖金了吗?它更快!
npm uninstall <package>
针对每个文件夹运行。我自己做的,效果很好!
npm uninstall
多多关照,这就是为什么此技巧很有用的原因。
foreach($package in ls node_modules){npm uninstall $package}
tr is not recognized
这对我有用:
命令提示符或gitbash到项目中的node_modules文件夹中,然后执行:
npm uninstall *
删除了该项目的所有本地软件包。
对于Windows,请转到node_modules目录,然后在powershell中运行它
npm uninstall (Get-ChildItem).Name
// forcibly remove and reinstall all package dependencies
ren package.json package.json-bak
echo {} > package.json
npm prune
del package.json
ren package.json-bak package.json
npm i
这实际上会创建一个伪造的空package.json,调用npm prune
以删除node_modules中的所有内容,还原原始package.json并重新安装所有内容。
其他一些解决方案可能更优雅,但是我怀疑这是更快且详尽的方法。在其他线程上,我看到有人建议只删除node_modules目录,但是至少对于Windows而言,这会导致npm随后阻塞,因为bin目录丢失了。也许在Linux上,它可以正确还原,但Windows不能。
实际上,如果要从package.json
仅npm ls
在package.json
依赖和使用同一目录的目录中卸载软件包npm uninstall <name>
或npm rm <name>
要删除的软件包,则没有任何选择。
npm i
“ npm i
”不仅会安装缺少的deps,还会更新node_modules以匹配package.json
(在阅读完所有内容之前,请不要重复这些步骤)
对我来说,所有提到的解决方案都行不通。我去/usr/lib
那里跑了
for package in `ls node_modules`; do sudo npm uninstall $package; done;
但是它也删除了npm
包装,只移除了一半包装(直到达到字母n)。
因此,我尝试通过节点指南再次安装节点。
# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
但它没有npm
再次安装。
因此,我决定重新安装整个节点
sudo apt-get remove nodejs
,然后按照上面的指南再次安装。
现在NPM再次正常工作,但是全局模块仍然存在。所以我检查了目录的内容,/usr/lib/node_modules
看来这里唯一重要的是npm
。所以我编辑了上面的命令以卸载除npm
for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;
它删除了所有未加前缀的模块@
。如此,我扩展了子目录的循环。
for package in $(ls node_modules); do if [ ${package:0:1} = \@ ]; then
for innerPackage in $(ls node_modules/${package}); do
sudo npm uninstall "$package/$innerPackage";
done;
fi; done;
我的/usr/lib/node_modules
现在仅包含npm
和链接的软件包。
的捎带关闭VIKAS KOHLI和jedmao,你可以这样做
单行版本:
npm uninstall `ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` `find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`
多行版本:
npm uninstall \
`ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` \
`find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`