如何卸载 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"
我也试过rm
、remove
和unlink
。和-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.x
的grunt
版本是全局安装的,在升级/维护版本时造成了很大的痛苦。
grunt
和 grunt-cli
是两个不同的东西。
grunt
(不带“cli”)通常通过运行npm install
安装在项目级别(当在package.json
中列为devDependency
时)。这也称为本地安装。
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-cli
。 gruntjs 的项目上的This issue 支持此过程。
永远不要全局安装grunt
(通过运行npm install -g grunt
)。
开启npm
和sudo
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-cli
和npm 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 包?的主要内容,如果未能解决你的问题,请参考以下文章