安装 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
。
这是在我卸载 node
和 npm
并使用 nvm
重新安装之后开始的。我想知道我在卸载node
时是否遗漏了一些东西,这是导致问题的原因。我检查了我的点文件,发现在.nvm
之外我还有一个.npm
。这正常吗?提前感谢您的任何建议。
【问题讨论】:
这可能是由于您的 PATH 环境变量中有多个路径,并且为不同版本的节点安装了babel-cli
。运行which babel
或which 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 && 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 包的主要内容,如果未能解决你的问题,请参考以下文章