如何卸载npm包?

问题描述 投票:56回答:5

我用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

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

编者注:

这个问题在5年前被问到如何卸载npm包。这是一个非常有用的问题,许多人为他们的问题找到了解决方案,因此我将其从最近的编辑中更改回来,称为如何卸载grunt包,因为它需要与任何其他npm包相同的过程。

gruntjs npm uninstall
5个回答
98
投票

要从项目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的好消息:

  • 如果您在2013年2月18日(grunt)之前安装了the day grunt v0.4.x was released,那么您的系统中可能还会有较旧的grunt版本。这是因为全球安装了低于grunt0.4.x版本,这在升级/维护版本时造成了很大的痛苦。
  • gruntgrunt-cli是两回事。 grunt(没有“cli”)通常通过运行devDependency安装在项目级别(当在package.json中列为npm install时)。这也称为本地安装。 grunt-cli是本地版本的grunt在不同项目/文件夹中运行的基础。它可以在本地安装,但在全局安装一次后更有用。
  • grunt仅在本地安装(通过运行npm install grunt)。
  • grunt-cli最好安装在全球(通过运行npm install -g grunt-cli)。 grunt-cli官方npm页面still warns against在全球安装grunt(没有cli)。
  • 如果要卸载grunt-cli的全局安装,请运行npm uninstall -g grunt-cliThis issuegruntjs项目支持这一程序。
  • 永远不要在全球安装grunt(通过运行npm install -g grunt)。

npmsudo

sudonpm表现不佳。只有你必须使用它。以下是关于其使用的优缺点的两个引用:

引用Isaac Z. Schlueter关于他的Introduction to npm文章:

我强烈建议你不要用sudo进行包管理!包可以运行任意脚本,这使得包管理器命令与链锯发型一样安全。当然,它很快,肯定会切断任何障碍,但你可能真的希望这个障碍留在那里。

我推荐这样做一次:

sudo chown -R $USER /usr/local

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

这种方式好多了。 / usr / local应该是你安装的东西,毕竟。

Andrei Karpushonak提到的又一个问题:

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

话虽如此,如果你想在不使用sudo的情况下安装全局模块,我认为没有比提到的更好的解决方案(从实用的角度来看)。安全性与易用性是一个非常广泛的主题,并没有简单的答案 - 它只取决于您的要求。


5
投票

同样的事情发生在我身上。在做

which grunt

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

sudo npm uninstall -g grunt

没有安装警告卸载

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

sudo npm install -g grunt-cli

虽然试图删除只是打字咕噜声

所以一旦我跑了

sudo npm unistall -g grunt-cli 

grunt被删除了。

虽然你有问题提到你跑

sudo npm install grunt

但仍然检查你是否也犯了同样的错误并用grunt-cli运行它


2
投票

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

npm - Remove a package

描述

“这会卸载一个软件包,完全删除代表它安装的所有内容。”

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

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

我发现使用了

which grunt 

或者

whereis grunt 

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

这两个命令都将返回grunt-cli安装的路径,但只是将其作为grunt返回。

还使用,

which grunt-cli

或者

whereis grunt-cli

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

我还有一种情况是我无法按照上面其他贡献者的推荐使用npm的卸载功能卸载grunt-cli。

对我来说唯一有用的是使用npm remove函数和程序的全名,如下所示。

npm rm -g grunt-cli

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

unbuild grunt-cli@#.##.#

祝好运!


2
投票

首先使用这个

which grunt-cli

要么

which grunt

这将向您展示模块的路径

就我而言,它位于/ usr / local / bin /

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

sudo rm grunt

这就结束了:)


0
投票

如果全球安装将-g添加到uninstall,可能你需要sudo

sudo npm uninstall grunt -g
© www.soinside.com 2019 - 2024. All rights reserved.