我用grunt
安装了sudo npm install 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
的2个目录?删除它们是否安全?
编者注:
这个问题在5年前被问到如何卸载npm包。这是一个非常有用的问题,许多人为他们的问题找到了解决方案,因此我将其从最近的编辑中更改回来,称为如何卸载grunt包,因为它需要与任何其他npm
包相同的过程。
要从项目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
)之前安装了the day grunt v0.4.x
was released,那么您的系统中可能还会有较旧的grunt
版本。这是因为全球安装了低于grunt
的0.4.x
版本,这在升级/维护版本时造成了很大的痛苦。grunt
和grunt-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-cli
。 This issue的gruntjs项目支持这一程序。grunt
(通过运行npm install -g grunt
)。在npm
和sudo
sudo
与npm
表现不佳。只有你必须使用它。以下是关于其使用的优缺点的两个引用:
引用Isaac Z. Schlueter关于他的Introduction to npm文章:
我强烈建议你不要用sudo进行包管理!包可以运行任意脚本,这使得包管理器命令与链锯发型一样安全。当然,它很快,肯定会切断任何障碍,但你可能真的希望这个障碍留在那里。
我推荐这样做一次:
sudo chown -R $USER /usr/local
这会将您的用户帐户设置为/ usr / local目录的所有者,以便您可以在其中发出常规命令。然后,在安装节点或发出npm命令时,您将不必使用sudo。
这种方式好多了。 / 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的情况下安装全局模块,我认为没有比提到的更好的解决方案(从实用的角度来看)。安全性与易用性是一个非常广泛的主题,并没有简单的答案 - 它只取决于您的要求。
同样的事情发生在我身上。在做
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运行它
在某些情况下,可能需要使用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@#.##.#
祝好运!
首先使用这个
which grunt-cli
要么
which grunt
这将向您展示模块的路径
就我而言,它位于/ usr / local / bin /
一旦我进入bin文件夹,我就写了
sudo rm grunt
这就结束了:)
如果全球安装将-g
添加到uninstall
,可能你需要sudo
sudo npm uninstall grunt -g