如何卸载npm包?

时间:2014-03-25 17:58:09

标签: gruntjs npm uninstall

我使用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包一样。

5 个答案:

答案 0 :(得分: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日(the day grunt v0.4.x was released)之前安装了grunt,那么您的系统中可能仍有较旧的grunt版本。这是因为全局安装了低于grunt的{​​{1}}版本,这在升级/维护版本时造成了很多痛苦。
  • 0.4.xgrunt是两回事。

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

  • npm install grunt 最好全局安装(通过运行grunt-cli)。 npm install -g grunt-cli官方grunt-cli页面still warns against在全球范围内安装npm(无cli)。
  • 如果要卸载grunt的全局安装,请运行grunt-cliThis issue项目gruntjs支持此过程。
  • 永远不要全局安装npm uninstall -g grunt-cli (通过运行grunt)。

npm install -g gruntnpm

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

在他的Introduction to npm文章中引用 Isaac Z. Schlueter

  

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

     

我建议这样做一次:

     

npm

     

将您的用户帐户设置为/ usr / local目录的所有者,以便您可以   只需在那里发出正常命令。那么你就不必使用sudo了   安装节点或发出npm命令。

     

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

Andrei Karpushonak提到的另一个问题:

  

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

           

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

答案 1 :(得分:5)

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

which grunt

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

sudo npm uninstall -g grunt

未安装警告卸载

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

安装
sudo npm install -g grunt-cli

尝试删除时只是输入grunt

所以一旦我跑了

sudo npm unistall -g grunt-cli 

grunt被删除了。

虽然你有问题提到你运行

sudo npm install grunt

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

运行它

答案 2 :(得分:1)

在某些情况下,可能需要使用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@#.##.#

祝你好运!

答案 3 :(得分:0)

如果已全局安装,则将-g添加到uninstall,可能您需要sudo

sudo npm uninstall grunt -g

答案 4 :(得分:0)

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

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

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

感谢gengxuelei on github提供解决方案!