如何卸载npm包?


67

我已经安装了grunt使用sudo npm install grunt,现在无法删除它。

我试过了:

$ sudo npm uninstall grunt

但这给了我一个WARN

npm WARN uninstall not installed in /home/kuba/projects/node_modules: "grunt-cli"

我也试过rmremoveunlink。和-g选项,但这些选项提供:

npm WARN uninstall not installed in /usr/lib/node_modules: "grunt"

但是我仍然可以从命令行运行grunt

编辑

$ whereis grunt
grunt: /usr/local/bin/grunt
$ file /usr/local/bin/grunt
/usr/local/bin/grunt: symbolic link to `../lib/node_modules/grunt/bin/grunt'
$ ls /usr/local/lib/node_modules
grunt jshint
$ ls /usr/lib/node_modules
bower  csslint  devtools-terminal  npm  plato

为什么我有2个目录npm?删除它们是否安全?

编者注

这个问题在5年前被问到如何卸载npm package。这是一个非常有用的问题,受到很多人的追捧,他们找到了解决问题的方法,因此,我将其从最近的修改为“如何卸载grunt软件包”的内容改回来,因为它需要与其他npm软件包相同的过程。


我认为我从旧版本的Xubuntu剩下了旧的npm模块。我从10或11开始,并更新为13.10。我只是删除那些文件。
jcubic 2014年

输出是sudo apt-get purge grunt什么?
jobin 2014年

@Jobin没有这样的软件包。我也在突触中搜索-不要咕gr。
jcubic 2014年

@Jobin可能是旧的nmp安装了它,当Xubuntu更新npm时,文件就留在那里了。
jcubic 2014年

npm update然后尝试npm uninstall grunt
Visakh B Sujathan

Answers:


114

要从npm项目node_modules文件夹中卸载模块,请运行:

npm uninstall <module> --save

请注意,运行此命令时,npm应从包含该node_modules文件夹的同一目录中卸载模块。该--save选项也会将其从您的package.json

也可以通过从本地node_modules文件夹中删除其目录来删除本地依赖项/模块安装。是的,在那里删除依赖项是安全的。

要卸载npm全局安装的模块,请运行:

npm uninstall -g <module>

从哪里运行此命令都没有关系。

要安装npm模块,请运行:(仅供参考)

npm install <module>

...要么:

npm install(如果package.json项目的根目录中有一个文件)

...要么:

npm install <module> --save-dev (如果要向依赖项添加最低版本)

关于Grunt的好消息

  • 如果您grunt在2013年2月18日(发布当天grunt v0.4.x)之前安装了稳定grunt版,则您的系统中可能仍存在较旧的版本。这是因为grunt版本低于0.4.x全局安装的版本,这在升级/维护版本时造成了很多麻烦。
  • gruntgrunt-cli是两个不同的东西。

    • grunt(不带“ cli”)通常是通过运行在项目级别安装的(列为devDependencyin时package.jsonnpm install。这也称为本地安装
    • grunt-cligrunt在不同项目/文件夹中运行本地版本的基础。它可以在本地安装,但是一次在全局安装时更有用。
  • grunt仅在本地安装(通过运行npm install grunt)。

  • grunt-cli最好是全局安装(通过运行npm install -g grunt-cli)。grunt-cli官方npm页面仍然警告不要grunt在全球范围内安装(没有CLI)。
  • 如果要卸载的全局安装grunt-cli,请运行npm uninstall -g grunt-cligruntjs项目上的此问题支持此过程。
  • 切勿grunt全局安装(通过运行npm install -g grunt)。

npmsudo

sudonpm。玩不好。仅在必要时使用它。下面是使用它的优点和缺点的两个引号:

引用艾萨克Z. Schlueter的对他的介绍故宫的文章:

我强烈建议您不要使用sudo进行程序包管理!软件包可以运行任意脚本,这使对软件包管理器命令的伪造像电锯理发一样安全。当然,它很快而且肯定会冲破任何障碍,但是您实际上可能希望该障碍停留在那儿。

我建议这样做一次:

sudo chown -R $USER /usr/local

这会将您的用户帐户设置为/ usr / local目录的所有者,以便您可以在其中发出常规命令。然后,当您安装节点或发出npm命令时,您将不必使用sudo。

这样好多了。毕竟,/ usr / local应该是您安装的东西。

Andrei Karpushonak提到的另一个收获是:

关于将/ usr / local的所有权更改为当前用户,存在某些安全问题和功能限制:

话虽如此,如果您想在不使用sudo的情况下安装全局模块,那么从实用主义的角度来看,我看不到任何比上述更好的解决方案。安全性与易用性是非常广泛的话题,对此没有简单的答案-它仅取决于您的要求。


这对我不起作用:npm uninstall packagename --save但这确实:npm uninstall --save packagename。旗帜的位置似乎有所不同。
arnoldbird '18

6

我也发生了同样的事情。在做

which grunt

我有路径/ usr / local / bin /。里面有一个文件夹咕unt声。但是在运行命令时(甚至从/ usr / local / bin /路径中):

sudo npm uninstall -g grunt

得到警告卸载未安装

解决方案:事实证明我是使用命令安装的

sudo npm install -g grunt-cli

而尝试删除只是输入咕typing声

所以一旦我跑步

sudo npm unistall -g grunt-cli 

咕unt声被删除了。

尽管您提到有问题要跑步

sudo npm install grunt

但是仍然请检查您是否也在执行相同的错误,并使用grunt-cli运行它


小错字:编写“ sudo npm卸载-g grunt-cli”而不是“ sudo npm unistall -g grunt-cli”
Denis.Sabolotni '19

2

在某些情况下,可能有必要使用npm的“删除软件包”功能。

npm-删除软件包

描述

“这将卸载软件包,完全删除代表该软件包安装的所有npm。”

在第三个代码块上,您发布了以下消息:

npm WARN uninstall not installed in /home/kuba/projects/node_modules: "grunt-cli"

我发现使用

which grunt 

或者

whereis grunt 

CLI /控制台中的命令提供了不完整且令人困惑的输出。

这些命令将返回的路径咕噜-CLI安装,但是这回只是作为咕噜

同时使用

which grunt-cli

或者

whereis grunt-cli

无法将任何输出返回到CLI控制台。我相信这是npm的名称空间问题/功能。

我也遇到无法按照上述其他贡献者的建议使用npm的卸载功能来卸载grunt-cli的情况。

唯一对我有用的方法是将npm remove函数与程序的全名一起使用,如下所示。

npm rm -g grunt-cli

这应该将以下内容返回到您的控制台。

unbuild grunt-cli@#.##.#

祝好运!


奇怪的是,这对我没有用。我刚刚删除了节点bin文件夹中的软链接。之后,我能够npm install -g grunt-cli并且npm rm -g grunt-cli没有任何问题。
安迪

2

首先使用这个

哪个咕unt声

要么

哪个咕unt

这将向您显示模块的路径

就我而言,它在/ usr / local / bin /中

一旦进入bin文件夹,我就写了

sudo rm grunt

到此为止了:)



0

运行接受的解决方案的命令对我不起作用。运行which grunt将导致/usr/local/bin/grunt,但正常(或sudo)npm uninstall -g grunt-cli无效。

这是最终对我有用的命令:

sudo npm uninstall grunt-cli -g --prefix=/usr/local

感谢github上的gengxuelei提供解决方案!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.