安装 nvm 后无法卸载全局 npm 包

Posted

技术标签:

【中文标题】安装 nvm 后无法卸载全局 npm 包【英文标题】:Can't uninstall global npm packages after installing nvm 【发布时间】:2018-05-25 14:48:21 【问题描述】:

我找到了几个与此问题相关的线程,但似乎没有一个专门处理我的案例,而且我无法使用我找到的建议来解决。

当我运行npm uninstall -g "some package"

它只是返回:up to date in .043s - 全局包仍然存在。

例如,我尝试使用uninstall babel-cli,在running npm uninstall -g babel-cli 之后,我仍然可以使用cli

这是在我卸载 nodenpm 并使用 nvm 重新安装之后开始的。我想知道我在卸载node 时是否遗漏了一些东西,这是导致问题的原因。我检查了我的点文件,发现在.nvm 之外我还有一个.npm。这正常吗?提前感谢您的任何建议。

【问题讨论】:

这可能是由于您的 PATH 环境变量中有多个路径,并且为不同版本的节点安装了 babel-cli。运行which babelwhich babel-cli(无论可执行文件名是什么)时返回什么? /usr/local/bin/babel 看起来它是全局安装的。据我所知nvm 不会在那里安装可执行文件。是否有可能您还使用另一个包管理器(如 macOS 上的 brew)安装了 babel? 我以为我遇到了这个问题,但我在包名中省略了“@”。如果你和我的情况一样,请记住“@”。例如npm uninstall -g @angular/cli 【参考方案1】:

(这里是 nvm 维护者)

您可以在npm uninstall -g 上获得的列表位于npm ls -g --depth=0。如果你没有看到你想卸载的东西,但你仍然可以访问它,那么如果它是 npm 安装的,它可能是与你的系统版本的 node 一起安装的。

您可以使用nvm use system && npm ls -g --depth=0 快速验证这一点。如果你在那里看到包,那么在使用系统版本时,你可以npm uninstall -g它。

【讨论】:

我没有安装系统 npm(只有 nvm)。我可以通过npm ls -g --depth=0看到我要卸载的包,但还是无法卸载。此外,npm ls -g --depth=0 在包列表之后输出:npm ERR! invalid: minizlib@1.0.3 /home/<...>/.nvm/versions/node/v8.9.4/lib/node_modules/npm/node_modules/tar/node_modules/minizlib 啊哈 - 在这种情况下,特定节点安装 (v8.9.4) 的 npm 副本似乎已损坏。不幸的是,最简单的解决方案是卸载该节点版本并重新安装 - nvm deactivate && nvm uninstall 8.9.4 && nvm install 8.9.4 应该这样做。 看起来是这样的。重新安装后一切正常。 圣母。为什么这不是在某处用粗体写的? :D 非常感谢 我在使用 macos,自从我安装它以来已经很久了 - 不确定。我通过从/usr/local/bin 中删除命令来修复它【参考方案2】:

对不起,我知道这是一个老问题,但我们现在是 2019 年,对我来说只是一个问题……我发现我需要在 NVM 关心的路径上调用 npm 上的卸载。

这对我有用:

Tue Aug 20 08:09:07 ~
<username> $ npm uninstall -g edgemicro@3.0.4
up to date in 0.051s
Tue Aug 20 08:09:13 ~
<username> $ edgemicro --version
current nodejs version is v8.16.0
current edgemicro version is 3.0.4
3.0.4
// Clearly didn’t work :(

// Let’s try sudo ….
Tue Aug 20 08:09:18 ~
<username> $ sudo npm uninstall -g edgemicro@3.0.4
Password:
up to date in 0.035s
Tue Aug 20 08:10:20 ~
<username> $ edgemicro --version
current nodejs version is v8.16.0
current edgemicro version is 3.0.4
3.0.4
// Still didn’t work :(

// So where is this seemingly immortal executable?
Tue Aug 20 08:10:28 ~
<username> $ which edgemicro
/Users/<username>/.nvm/versions/node/v8.16.0/bin/edgemicro
// It’s under some NVM specific path it seems.
// It seems NPM is also under some NVM specific path, kinda expected.
Tue Aug 20 08:10:33 ~
<username> $ which npm
/Users/<username>/.nvm/versions/node/v8.16.0/bin/npm

// So let’s use that exact npm to perform the uninstall …
Tue Aug 20 08:10:42 ~
<username> $ /Users/<username>/.nvm/versions/node/v8.16.0/bin/npm uninstall -g edgemicro
npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but npm-shrinkwrap.json was generated for lockfileVersion@0. I'll try to do my best with it!
removed 2442 packages in 25.851s
Tue Aug 20 08:11:24 ~
<username> $ which edgemicro
Tue Aug 20 08:11:29 ~
<username> $ // Done.

【讨论】:

我也必须这样做/usr/local/bin/npm uninstall -g create-react-app 为我工作。不知道为什么我们需要经历这一切...... 谢谢!虽然这对我来说确实需要额外的步骤,但我在您找到的目录中打开了 Finder,以删除我的包。【参考方案3】:

以上解决方案都不适合我。

我的 nvm 版本是 1.0.1 - 很奇怪。

所以没有一个建议:

nvm deactivate && nvm uninstall..

为我工作,因为它们不是命令。

我试图卸载create-react-app

which create-react-app
/usr/local/bin/create-react-app

我只是做了最明显最幼稚的事情

rm -rf /usr/local/bin/create-react-app

一切都很好!

【讨论】:

nvm deactivate &amp;&amp; nvm uninstall web-push -g 为我工作。谢谢@daniel【参考方案4】:

我在其中一个 npm 全局包中遇到过同样的情况,以下解决方案对我有用。 请在命令前使用 sudo 来解决此问题。比如 sudo npm uninstall -g "some package"

没有 sudo: []$ npm 卸载 -g 松露 0.082s 内更新

尝试使用 sudo 后: []$ sudo npm 卸载 -g 松露 [sudo] shahid 的密码: 在 1.902 秒内删除了 81 个包

[]$:松露 bash: /usr/bin/truffle: 没有这样的文件或目录

【讨论】:

【参考方案5】:

无论你调用多少次 npm uninstall babel,

或者 Yarn 卸载 -g babel

或者 Yarn 卸载 -g babel-cli

它确实显示已更新。当你通过输入“babel -help”检查它是否仍然存在时

你明白了-> babel still somewhere in your Mac

我知道这很令人沮丧。所以我找到了这些文件在本地存储的位置,并在将它们从本地存储中删除后, 我终于得到了-> Finally my system doesn't understand what babel is. What we really want

我是怎么找到的:

Finder 的搜索结果不会为您提供全局 babel 存储的路径。 我发现在我们的真实根目录“Macintosh HD”中有一个名为 /usr 的文件夹 它被隐藏了

所以, 选择查找器 -> 前往 -> 前往文件夹.. 然后输入“/usr”。

将打开一个新的查找器窗口,它会显示其中的所有文件。 现在您可以四处浏览并检查您安装的所有文件,其中一些可能被遗忘并且永远没有机会删除。

转到 usr/local/bin -> 在这里你会找到你全局安装的文件。 如下图->Directory of shortcuts

同样,如您所见,图标上有箭头标志,表示这些只是快捷方式。删除它们会切断链接,但文件仍会在某处。

要删除文件,请右键单击图标并选择“显示原始文件”

您将被重定向到一个文件夹,您将在其中找到 babel.js 文件。

请记住,它只是一个文件。要完全删除 babel-cli,请在 finder 中选择列视图,然后您可以向左滚动并检查其父目录。 这里是实际安装完成的地方。

finalpath part 1

finalpath part 2

您可以看到,就像安装在我们本地 Web 项目中的基本节点模块一样,babel-cli 和类似的此类包以类似的格式安装,但安装在这些全局位置。

现在您可以右键单击 babel-cli 文件夹并将其移至回收站。

希望狩猎终于结束。

【讨论】:

【参考方案6】:

我知道这是一个老问题,但如果以上选项均无效,请执行此操作。进入终端或命令提示符并输入“open /usr/local/bin”。它将打开“usr”的隐藏文件夹并查找要删除的文件。希望这会有所帮助。

【讨论】:

以上是关于安装 nvm 后无法卸载全局 npm 包的主要内容,如果未能解决你的问题,请参考以下文章

自己安装的node nvm识别吗

windows下使用nvm-windows做nodejs版本管理

Mac安装Nvm Node开发环境

Mac 安装 nvm 教程

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

Mac下彻底卸载node和npm