错误:“ brew link”步骤未成功完成


158

我正在尝试通过Homebrew安装node.js。不幸的是,我得到这个错误:

  ~  brew install node
==> Downloading http://nodejs.org/dist/v0.8.10/node-v0.8.10.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/node/0.8.10
==> make install
==> Caveats
Homebrew installed npm.
We recommend prepending the following path to your PATH environment
variable to have npm-installed binaries picked up:
  /usr/local/share/npm/bin
Warning: Could not link node. Unlinking...
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link node'
==> Summary
/usr/local/Cellar/node/0.8.10: 856 files, 13M, built in 103 seconds

因此,我尝试手动链接节点...

  ~  brew link node
Linking /usr/local/Cellar/node/0.8.10... Warning: Could not link node. Unlinking...

Error: Could not symlink file: /usr/local/Cellar/node/0.8.10/lib/node_modules/npm/scripts/relocate.sh
Target /usr/local/lib/node_modules/npm/scripts/relocate.sh already exists. You may need to delete it.
To force the link and delete this file, do:
  brew link -f formula_name

To list all files that would be deleted:
  brew link -n formula_name

没有运气,所以我尝试强制链接节点...

  ~  brew link -f node
Linking /usr/local/Cellar/node/0.8.10... Warning: Could not link node. Unlinking...

Error: Permission denied - /usr/local/lib/dtrace/node.d

我在任何方面都不熟悉dtrace,而且害怕弄乱权限,所以我尝试sudo。

 ~ git:(master) sudo brew link -f node
Password:
Error: Cowardly refusing to `sudo brew link'
You can use brew with sudo, but only if the brew executable is owned by root.
However, this is both not recommended and completely unsupported so do so at
your own risk.

我尝试通过卸载节点,brew uninstall node然后重试安装,但是没有运气。


我不能自动制作。mongodb和要与自制程序链接的节点
像素67

Answers:


136

现在,用于node.js的Homebrew软件包再次包含了npm,所以当我错过了homebrew软件包有关先删除独立版本的消息时,这件事发生在我身上。

假设,像我一样,你已经通过尝试升级知道要打破之前节点/ NPM npm uninstall npm -g首先,你可以rm -rf /usr/local/lib/node_modules/npmbrew link node。这将删除独立的自托管npm软件包(而不是要安装的一台brew),并让brew从Cellar对其捆绑的软件包进行符号链接。


9
删除npm后,您需要关闭并重新打开终端以将其从路径中删除,以使链接正常工作,如@dain在其评论中所述。
kflorence

这对我有用。就我而言,升级期间无法链接Elixir和Erlang。我关心的目录不是我的用户名所有,而是“ root”所有。我决定删除这些目录并重新安装。
Roebuck教练

当我尝试链接节点时,我得到:*错误:没有这样的桶:/ usr / local / Cellar / node * | 有任何想法吗?
SuperUberDuper 2015年

1
在尝试升级npm之后,我花了一个小时试图解决这个问题。在首先删除独立版本之前,Brew不允许我链接。nate的建议对我有用。
布兰登·克拉普

如何重新安装npm?还是与brew install节点一起安装?
marciokoko '16

153

我运行Mac OS X Mavericks。我尝试安装0.10.25节点,但最佳答案对我不起作用。

natevw说,rm -rf /usr/local/lib/node_modules/npm但是如果权限/usr/local/lib/node_modules如下所示:

drwxr-xr-x   3 root      admin   102 Feb  2 20:45 node_modules

然后brew将无法在该目录中创建其npm符号链接。这是我的解决方案:

步骤1:更新自制程序

$ brew update

步骤2:在系统上的所有位置删除节点/ npm

这些命令中的某些命令不是必需的,具体取决于您过去安装node / npm的方式。

$ brew uninstall npm
$ brew uninstall node
$ npm uninstall npm -g
$ sudo rm -rf /usr/local/lib/node_modules

注意:我有一些运行时发现的杂散节点文件brew -v link node(这给了brew抱怨的链接错误的详细输出)。您可能需要:

$ sudo rm -rf /usr/local/include/node
$ sudo rm -rf /usr/local/lib/node

步骤3:打开一个新终端并安装节点

$ brew install node

1
谢谢!这对我很有帮助,并解决了我的问题。+1
Ricky Mutschlechner 2014年

5
为我工作...虽然我必须删除node_modules(在's'结尾)...
songololo 2014年

1
这应该成为公认的答案。也与优胜美地有关。
Rog 2014年

1
这也对我有用,但是我必须运行chown命令才能最终允许链接。 sudo chown -R whoami/ usr / local Sauce
straubcreative 17-4-27

1
要在Mac上的所有位置删除节点,我遵循了这篇文章:stackabuse.com/how-to-uninstall-node-js-from-mac-osx
ankitkpd

40
sudo chown -R $(whoami) /usr/local 

就像酿造现场故障排除中提到的那样很好

https://github.com/Homebrew/homebrew/wiki/troubleshooting


3
我很惊讶他们推荐这个。这样做会更好吗?sudo chmod -R g+w /usr/local(虽然说实话,两者都吓到我了)
getWeberForStackExchange 2014年

@getWeberForStackExchange我尝试了您所说的内容,但对我没有任何影响。任何想法为什么会这样?
f1lt3r

@AlistairMacDonald您可能现在已经解决了这个问题,但是我可能需要更多信息来弄清楚为什么遇到麻烦。更改/ usr / local中所有内容的所有权应该允许当前用户在/ usr / local结构中创建节点链接。我提议只更改每个文件的组权限而不是所有权,这有点疯狂。我的命令假定您的用户属于拥有所有/ usr / local的组。/ usr / local中也可能有不同的组,这需要一个chgrp命令。
getWeberForStackExchange

我专门在OS X 10.11下安装了自制软件,以获取午夜指挥官和wget。我没有安装npm。mc安装过程中出现的问题中所述的“ brew link”步骤失败。这个答案对我有用。我进行了更改,并使用“ brew link midnight-commander”重新运行了链接,然后运行正常。之后,按预期在命令行中键入“ mc”将调出午夜指挥官。在那之后,“ brew install wget”就毫不夸张地工作了。好答案。
fyngyrz

该命令是由推荐brew doctor,但我更喜欢sudo su,执行命令,然后关闭该终端
jchnxu

37

您可能已经使用另一种方法安装了旧版本的node.js,因此您需要手动删除以brew方式获取的文件。

请执行brew link -n node并手动删除这些冲突的文件和目录,然后重试brew link node


4
花了一些时间,但正是我需要做的。谢谢:)
Christoffer

我也有同样的问题aspell。如何找到冲突的文件和目录?
LWZ

33

我来晚了,对我有用的是:

* npm uninstall npm -g

* brew uninstall node

* brew install node

* sudo rm -rf /usr/local/lib/dtrace/node.d

* brew link node (caused error with permissions)

* sudo chmod 777 /usr/local/lib/dtrace/node.d

* brew link node

在此序列之后一切都成功


这终于对我有用。在已经安装npm后尝试通过brew安装节点之后,出现了问题。对于我来说,它基本上打破了npm。我必须rm -rf npm文件夹,然后通过brew安装(npm卸载不再对我有用)。之后,其余步骤将正常运行。
rdrobinson3 2013年

5
sudo chmod 777这绝对不是正确的解决方案,如果您遇到权限问题,请调查为什么会发生这种情况,并设置完成此工作所需的最低权限级别。此命令将允许系统上的任何人修改文件。
bobmagoo 2014年

辉煌。谢谢。尽管我brew link node第一次没有烫发问题。
Bede Constantinides 2015年

与其使用chmod而不是该目录,我只是获得了它的所有权。chown myuser -R -v / usr / local / lib / dtrace /我也有一个问题,dtrace作为目录不存在。错误是相同的,但没有目录。
杰森·肖特

15

试试这个。从另一个参考那里得到了帮助。

brew uninstall node
brew update
brew upgrade
brew cleanup
brew install node
sudo chown -R $(whoami) /usr/local
brew link --overwrite node
brew postinstall node

brew postinstall node是票
原型

这是票!由于某种原因,我不得不运行brew upgrade 2X,第二次它要求我安装XCode的更新。在brew link --overwrite node最终命令之间,这一切似乎都有效。您建议的最终命令由于'sudo'无效。相反,请使用brew postinstall node
Dani Amsalem

10

将所有应用程序从旧Mac转移到新Mac后,我遇到了同样的问题。

我通过运行找到解决方案brew doctor

警告:发现损坏的符号链接。用删除它们brew prune

运行后brew prune,Homebrew终于回到正轨:)


4

我的问题有一个稍微不同的解决方案。brew要在其中创建符号链接的目录不属于当前用户。

ls -la /usr/local/bin/lib/node | grep node 产生:

drwxr-xr-x    3 24561  wheel   102 May  4  2012 node
drwxr-xr-x    7 24561  wheel   238 Sep 18 16:37 node_modules

对我来说,以下解决了它:

sudo chown $(users) /usr/local/bin/lib/node_modules
sudo chown $(users) /usr/local/bin/lib/node

ps。$(users)将扩展到您的用户名,竭尽全力帮助懒惰的复制粘贴者;)


2
我遇到过同样的问题。如果您为其他一些应用程序手动运行“ make install”,则显然会发生这种情况。我最近刚刚这样做,解决的办法是像你一样穿上衣服。
理查德·塔特尔

4

thx @suweller。

我解决了这个问题:

  bin git:(master)  brew link node
Linking /usr/local/Cellar/node/0.10.25... Warning: Could not link node. Unlinking...

Error: Permission denied - /usr/local/lib/node_modules/npm

我和suweller有同样的问题:

  bin git:(master)  ls -la /usr/local/lib/ | grep node
drwxr-xr-x   3 24561  wheel   102 11 Okt  2012 node
drwxr-xr-x   3 24561  wheel   102 27 Jan 11:32 node_modules

所以我通过以下方式解决了这个问题:

  bin git:(master)  sudo chown $(users) /usr/local/lib/node_modules
  bin git:(master)  sudo chown $(users) /usr/local/lib/node

解决此问题后,我得到了另一个问题:

  bin git:(master)  brew link node
Linking /usr/local/Cellar/node/0.10.25... Warning: Could not link node. Unlinking...

Error: Could not symlink file: /usr/local/Cellar/node/0.10.25/lib/dtrace/node.d
Target /usr/local/lib/dtrace/node.d already exists. You may need to delete it.
To force the link and overwrite all other conflicting files, do:
  brew link --overwrite formula_name

To list all files that would be deleted:
  brew link --overwrite --dry-run formula_name

所以我通过以下方式删除了node.d:

  bin git:(master)  sudo rm /usr/local/lib/dtrace/node.d

另一个权限错误:

  bin git:(master)  brew link node
Linking /usr/local/Cellar/node/0.10.25... Warning: Could not link node. Unlinking...

Error: Could not symlink file: /usr/local/Cellar/node/0.10.25/lib/dtrace/node.d
/usr/local/lib/dtrace is not writable. You should change its permissions.

并修复它:

  bin git:(master)  sudo chown $(users) /usr/local/Cellar/node/0.10.25/lib/dtrace/node.d

最后一切正常:

  bin git:(master)  brew link node
Linking /usr/local/Cellar/node/0.10.25... 1225 symlinks created

3

大多数节点的brew安装问题是由于权限错误或先前已安装节点,然后尝试通过brew安装而引起的。最终对我有用的解决方案是:

警告:这将卸载使用的nodejs(多个版本),请谨慎操作:

  1. 通过brew删除节点:

    brew卸载节点

  2. 也通过武力做到了:

    brew卸载节点--force

  3. 要使用脚本源:删除节点

    curl -O https://raw.githubusercontent.com/DomT4/scripts/master/OSX_Node_Removal/terminatenode.sh

然后:

chmod +x /path/to/terminatenode.sh

然后:

./terminatenode.sh .
  1. 然后确保执行以下命令:

    chown $ USER / usr / local

  2. 然后进行一次brew更新(继续执行直到所有内容都更新为止):

    酿造更新

  3. 清理冲泡并再次运行更新(可能是多余的),并运行医生以确保一切就绪:

    冲泡清理;酿造更新;酿造医生

  4. 最后通过brew(详细)安装节点:

    brew install -v节点


数字格式不正确...但是步骤在那里。明天将解决格式问题。
AhsenB 2014年

2

最终答案:将目录的所有者更改为您自己的所有者

sudo chown -R `whoami` /usr/local/include

如果您运行Brew Doctor,Brew也建议这样做


2

我在安装时遇到错误,无法链接节点,并且/ usr / local / include是不可写的

下面的解决方案为我工作:- 首先创建include文件夹,请注意,这需要sudo特权

cd /usr/local

sudo mkdir include

sudo chown -R $(whoami) $(brew --prefix)/*

brew link node

1

我还设法弄乱了这些Homebrew版本之间的NPM和安装的软件包,无论我取消链接/链接和卸载/安装的节点有多少次,它仍然不起作用。

事实证明,您必须从路径中删除NPM,否则Homebrew将不会安装它:https : //github.com/mxcl/homebrew/blob/master/Library/Formula/node.rb#L117

希望这可以帮助遇到相同问题的人并节省一个小时左右的时间,我不得不花时间寻找问题...


谢谢。我必须结合投票最高的答案来执行此操作,以使其正常工作。
kflorence

1

通过Finder,删除此文件:

/usr/local/lib/dtrace/node.d

在终端:

$ brew link --overwrite --dry-run node

然后:

$ brew link node

1
当我跑步时brew link --overwrite --dry-run node,我看到了错误No such keg: /usr/local/Cellar/node。我想念什么?
PKHunter

1

我已经尝试了所有方法,但没有一个起作用。最简单的方法是从https://nodejs.org/en/download/重新安装节点

只需下载pkg并安装。现在我有工作了npmnode又来了。


0

不知道这是否是一个好主意:在尝试所有其他解决方案均未成功后,我只是重命名了/ usr / local / lib / dtrace,链接的节点并再次重命名了目录。之后,节点按预期工作。


0

我为此苦了一段时间。(对我而言,“ npm卸载npm -g”什么都没做)

我尝试了很多事情:

npm uninstall npm -g
brew uninstall node
brew install node

尝试链接节点文件时,我仍然遇到一些问题并出现错误

最后我尝试了这个

brew link --overwrite node

那似乎已经解决了。(它会覆盖所有冲突文件,并且还会链接节点和npm)

希望这可以帮助


0

我完全卸载了brew,然后再次开始,只再次发现了相同的问题。

Brew似乎通过将所需的二进制文件符号链接到您的系统中来工作,其他安装方法通常会在这些系统中复制文件。

我在这里找到了一组现有的节点库:

/usr/local/include/node

经过一番摸索后,我记得当时已针对该旧版本安装了节点,但它不是通过brew来完成的。

我手动删除了整个文件夹,并成功链接了npm。

这可以解释为什么使用brew brew卸载甚至卸载brew本身都不起作用。

排名最高的答案非常简单,但是我想补充一下为什么有必要的看法。

我猜想其他Brew软件包的许多问题可能是由于软件包的旧的非酿造实例造成的。


0

一直在使我的头在符号链接节点上崩溃..似乎没有任何作用...但是最终有效的方法是设置正确的权限。这个'sudo chown -R $(whoami)/ usr / local'为我完成了工作。


0

我使用以下命令在El Capitan中修复了此问题。老实说,不知道它做什么,但是我想分享一下,因为它解决了我的问题。

brew link --overwrite node

-5

您需要手动删除npm软件包。

第一个取消链接节点: brew link -n node

删除npm文件夹: rm -R /usr/local/Cellar/node/0.8.10/lib/node_modules/npm

再次链接: brew link node

将会有一个指向npm新位置的软链接


5
这不是删除brew正在尝试安装的NEW npm吗?之后,我没有安装可正常使用的npm,而按照我的答案删除OLD npm文件夹即可。
natevw 2012年

在我看来,您好像也正在尝试删除新软件包-而肯定是需要删除的旧软件包了吗?我实际上发现/ usr / local / bin / npm剩下一个符号链接
Caroline
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.