如何卸载 npm 包?

Posted

技术标签:

【中文标题】如何卸载 npm 包?【英文标题】:How to uninstall npm package? 【发布时间】:2014-05-03 18:32:28 【问题描述】:

我已经使用sudo npm install grunt 安装了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 的目录?删除它们是否安全?

编者注

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

【问题讨论】:

我认为我有旧版本的 Xubuntu 遗留下来的旧 npm 模块。我从 10 或 11 开始并更新到 13.10。我只是删除那些文件。 sudo apt-get purge grunt 的输出是什么? @Jobin 没有这样的包。我也在突触中搜索 - 没有咕噜声。 @Jobin 可能是旧的nmp安装它,当Xubuntu更新npm时,文件就留在那儿了。 尝试npm update 然后npm uninstall grunt 【参考方案1】:

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

npm uninstall <module> --save

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

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

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

npm uninstall -g <module>

从哪里运行这个命令并不重要。

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

npm install <module>

...或:

npm install(如果您的项目根目录下有package.json 文件)

...或:

npm install <module> --save-dev(如果你想为依赖添加最低版本)

关于咕噜声的好消息:

如果您在 2013 年 2 月 18 日之前安装了 grunt stable (the day grunt v0.4.x was released),那么您的系统中可能还有一个较旧的 grunt 版本。那是因为低于0.4.xgrunt版本是全局安装的,在升级/维护版本时造成了很大的痛苦。

gruntgrunt-cli 是两个不同的东西。

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

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-cli。 gruntjs 的项目上的This issue 支持此过程。 永远不要全局安装grunt(通过运行npm install -g grunt)。

开启npmsudo

sudo 不能很好地与npm 配合使用。仅在必要时使用它。以下是关于其使用优缺点的两段引述:

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

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

我建议这样做一次:

sudo chown -R $USER /usr/local

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

这样会好很多。毕竟 /usr/local 应该是你安装的东西。

Andrei Karpushonak 提到的另一个问题:

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

如果机器上有另一个用户可以使用全局 npm 包 - 不要更改 /usr/local 的所有权 https://apple.stackexchange.com/questions/1393/are-my-permissions-for-usr-local-correct https://askubuntu.com/questions/261326/is-it-safe-to-chown-usr-local

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

【讨论】:

这对我不起作用:npm uninstall packagename --save 但这确实有效:npm uninstall --save packagename。旗帜的位置似乎有所不同。【参考方案2】:

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

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 

咕噜声被移除了。

虽然你有提到你运行的问题

sudo npm install grunt

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

【讨论】:

小错字:写“sudo npm uninstall -g grunt-cli”而不是“sudo npm unistall -g grunt-cli”【参考方案3】:

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

npm - Remove a package

说明

“这将卸载一个包,完全删除代表它安装的所有 npm。”

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

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@#.##.#

祝你好运!

【讨论】:

奇怪的是,这对我也不起作用。我刚刚删除了节点 bin 文件夹中的软链接。之后,我可以毫无问题地npm install -g grunt-clinpm rm -g grunt-cli【参考方案4】:

先用这个

哪个 grunt-cli

或者

哪个咕哝

这会告诉你模块的路径

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

进入我刚刚写的 bin 文件夹后

sudo rm 咕噜声

这就是它的结束:)

【讨论】:

【参考方案5】:

如果它是全局安装的,请将-g 添加到uninstall,您可能需要sudo

sudo npm uninstall -g grunt 

【讨论】:

【参考方案6】:

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

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

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

感谢gengxuelei on github 的解决方案!

【讨论】:

以上是关于如何卸载 npm 包?的主要内容,如果未能解决你的问题,请参考以下文章

如何卸载使用 npm 链接安装的软件包?

npm学习之如何安装全局包更新全局安装的包卸载全局安装的包

如何删除npm包

mac 如何彻底卸载node

如何卸载Node、NPM、yarn

如何在 Node.js 中卸载 npm 模块?