我使用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
包一样。
答案 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的好消息 :
grunt v0.4.x
was released)之前安装了grunt
,那么您的系统中可能仍有较旧的grunt
版本。这是因为全局安装了低于grunt
的{{1}}版本,这在升级/维护版本时造成了很多痛苦。 0.4.x
和grunt
是两回事。
grunt-cli
(没有“cli”)通常通过运行grunt
安装在项目级别(在devDependency
中列为package.json
)。这也称为本地安装。npm install
是grunt-cli
的本地版本在不同项目/文件夹中运行的基础。 可以在本地安装,但在全局安装时更有用。 grunt
仅在本地安装(通过运行grunt
)。
npm install grunt
最好全局安装(通过运行grunt-cli
)。 npm install -g grunt-cli
官方grunt-cli
页面still warns against在全球范围内安装npm
(无cli)。grunt
的全局安装,请运行grunt-cli
。 This issue项目gruntjs支持此过程。npm uninstall -g grunt-cli
(通过运行grunt
)。 在npm install -g grunt
和npm
sudo
与sudo
的效果不佳。只有你必须使用它。以下是关于其使用的优缺点的两个引用:
在他的Introduction to npm文章中引用 Isaac Z. Schlueter :
我强烈建议您不要使用sudo进行包管理! 包可以运行任意脚本,这使得sudoing包管理器命令 像电锯一样安全。当然,它很快,肯定会削减 通过任何障碍,但你可能真的希望这个障碍留在那里。
我建议这样做一次:
npm
将您的用户帐户设置为/ 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的情况下安装全局模块, 我没有看到比提到的更好的解决方案(从实用的角度来看)。 安全性与易用性是一个非常广泛的主题,并没有简单的答案 - 这只取决于你的要求。
答案 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 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提供解决方案!