Ошибка: шаг «brew link» не был успешно выполнен

158

Я пытаюсь установить node.js через Homebrew. К сожалению, я получаю эту ошибку:

  ~  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и повторить попытку установки безуспешно .

chandlervdw
источник
Я не могу получить автоматику. mongodb и узел для связи с домашним пивом
пиксель 67

Ответы:

136

Пакет homebrew для node.js теперь снова включает npm, поэтому это случилось со мной, когда я пропустил сообщение пакета homebrew о первом удалении автономной версии.

Предполагая, что, как и я, вы уже сломали узел / npm, пытаясь выполнить обновление, прежде чем npm uninstall npm -gузнаете сначала, rm -rf /usr/local/lib/node_modules/npmа потом можете brew link node. Это удаляет автономный пакет npm с собственным хостом (а не тот, который brew хотел бы установить) и позволяет brew symlink его пакет из Cellar.

natevw
источник
9
После того, как вы удалите npm, вам нужно закрыть и снова открыть свой терминал, чтобы удалить его с вашего пути, чтобы ссылки работали правильно, как упомянул @dain в своем комментарии.
Кфлоренция
Это сработало для меня. В моем случае я не мог связать Эликсир и Эрланг во время апгрейда. Эти каталоги не принадлежали моему имени пользователя, но принадлежали «root». Я решил удалить эти каталоги и переустановить.
Тренер Робак
когда я пытаюсь связать узел, я получаю: * Ошибка: Нет такого кег: / usr / local / Cellar / node * | Любые идеи?
SuperUberDuper
1
После попытки обновить npm я потратил час, пытаясь понять это. Brew не давал мне ссылки, пока сначала не была удалена отдельная версия. Рекомендации от Нейта работали для меня.
Брэндон Клэпп,
Как мне переустановить npm? Или он устанавливается вместе с узлом установки brew?
Marciokoko
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: Обновить Homebrew

$ 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
franksort
источник
1
Спасибо! Это мне очень помогло и исправило мою проблему. +1
Рикки Мучлехнер
5
Работал на меня ... хотя мне пришлось удалить каталог node_modules (заканчивающийся на 's') ...
songololo
1
Это должно стать принятым ответом. Относится к Йосемити тоже.
Рог
1
Это сработало и для меня, однако мне пришлось запустить команду chown, чтобы наконец разрешить ссылку. sudo chown -R whoami/ usr / local Sauce
страубреатив
1
Чтобы удалить узел везде на вашем Mac, я следовал этой статье: stackabuse.com/how-to-uninstall-node-js-from-mac-osx
ankitkpd
40
sudo chown -R $(whoami) /usr/local 

будет хорошо, как упомянуто в устранении неполадок сайта brew

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

Талал
источник
3
Я удивлен, что они рекомендуют это. Не лучше ли сделать: sudo chmod -R g+w /usr/local(хотя, честно говоря, оба меня пугают)
getWeberForStackExchange
@getWeberForStackExchange Я попробовал то, что вы сказали, но для меня это не имело значения. Есть идеи, почему это может быть?
f1lt3r
@AlistairMacDonald Вы, наверное, уже решили это, но мне, вероятно, потребуется больше информации, чтобы понять, почему у вас возникли проблемы. Изменение владельца всего в / usr / local должно позволить текущему пользователю создавать ссылки на узлы в структуре / usr / local. Я предлагал просто изменить групповые права доступа для каждого файла вместо владельца, что немного менее безумно. Моя команда предполагала, что ваш пользователь является частью группы, которой принадлежат все / usr / local. Также возможно, что в / usr / local есть разные группы, для которых потребуется chgrpкоманда.
getWeberForStackExchange
Я установил home-brew под OS X 10.11 специально для получения полуночного командира и wget. У меня не установлен npm. Не удалось выполнить шаг «brew link», как описано в вопросе во время установки mc. Этот ответ работал для меня; Я внес изменения, перезапустил ссылку с «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

Все было успешно после этой последовательности

Будет
источник
Это, наконец, сработало для меня. У меня были проблемы после того, как я попытался установить узел через brew после того, как уже был установлен npm. Это по существу сломало npm для меня. Я должен был rm -rf папку npm, затем установить через brew (удаление npm больше не работало для меня). После этого остальные шаги сработали отлично.
rdrobinson3
5
sudo chmod 777Это никогда не является правильным решением, если у вас есть проблемы с разрешениями, выясните, почему они возникают, и установите минимальный уровень разрешений, необходимый для выполнения работы. Эта команда позволит изменить файл любому пользователю системы.
bobmagoo
Brilliant. Спасибо. Хотя у меня не было проблем с пермиссией brew link nodeв первый раз.
Беда Константинидес
Вместо того, чтобы 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
Randula
источник
brew postinstall nodeбыл билет
прототип
Это был билет! По какой-то причине мне пришлось запустить обновление brew 2X, и во второй раз он попросил меня установить обновление для XCode. Между brew link --overwrite nodeфинальной командой и, кажется, все работает. Последняя предложенная вами команда не работает из-за 'sudo. Вместо этого используйтеbrew postinstall node
Дани Амсалем
10

У меня была такая же проблема после переноса всех моих приложений со старого Mac на мой новый.

Я нашел решение, запустив brew doctor:

Предупреждение: сломаны символические ссылки. Удалить их сbrew prune

После запуска brew pruneHomebrew наконец-то вернулся на трассу :)

Кевин Л.Р.
источник
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

пс. $(users)расширится до вашего имени пользователя, немного позаботился о том, чтобы помочь ленивым копировщикам;)

suweller
источник
2
Я была такая же проблема. Очевидно, это может произойти, если вы запустите «make install» для какого-то другого приложения вручную. Я недавно сделал именно это, и решение состояло в том, чтобы набивать, как ты.
Ричард Туттл
4

спасибо @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

У меня была та же проблема, что и у Сувеллера:

  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
zero3nna
источник
3

Большинство проблем установки brew с узлом вызваны ошибками разрешения или наличием ранее установленного узла, а затем попыткой установить его через brew. Решение, которое сработало для меня, наконец, было:

ВНИМАНИЕ: Это приведет к удалению использования nodejs (несколько версий) с осторожностью:

  1. Удалить узел через заварку:

    заваривать узел удаления

  2. также сделал через силу:

    узел удаления brew --force

  3. Чтобы использовать скрипт Source: Remove node :

    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. Очистите brew и снова запустите обновление (может быть избыточным) и запустите doctor, чтобы убедиться, что все на месте:

    очистка от заваривания; обновление варева; доктор варево

  4. И, наконец, установите узел через brew (подробно):

    brew install -v node

AhsenB
источник
Числа не форматируются правильно ... но шаги есть. Завтра исправлю проблему форматирования.
AhsenB
2

окончательный ответ: смените владельца этого каталога на того, кем бы вы ни были

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

который также рекомендуется Brew, если вы запускаете Brew Doctor

Бобо
источник
2

При установке произошла ошибка, из-за которой не удалось связать узел, и / usr / local / include не доступен для записи

Ниже решение сработало для меня: - Сначала создайте папку include, обратите внимание, что это требует привилегий sudo

cd /usr/local

sudo mkdir include

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

brew link node
Пухрай Сони
источник
1

Мне также удалось испортить свой NPM и установленные пакеты между этими версиями Homebrew, и сколько бы раз я ни связывал / связывал и удалял / устанавливал узел, он все равно не работал.

Оказывается, вы должны удалить NPM из пути, иначе Homebrew не установит его: https://github.com/mxcl/homebrew/blob/master/Library/Formula/node.rb#L117.

Надеюсь, что это поможет кому-то с той же проблемой и сэкономит тот час или около того, что мне пришлось потратить на поиск проблемы ...

Дейн
источник
Спасибо. Я должен был сделать это в сочетании с ответом, получившим наибольшее количество голосов, чтобы он работал правильно.
Кфлоренция
1

Искатель, удалите этот файл:

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

в терминале:

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

затем:

$ brew link node
monimen
источник
1
Когда я бегу brew link --overwrite --dry-run node, я вижу ошибку No such keg: /usr/local/Cellar/node. Чего мне не хватает?
PKHunter
1

Я перепробовал все методы, и ни один из них не работает. Самый простой способ - переустановить узел с https://nodejs.org/en/download/.

Просто скачайте pkgи установите его. Теперь у меня есть работа npmи nodeснова.

охотник
источник
0

Не знаю, если это хорошая идея или нет: попробовав все другие решения безуспешно, я просто переименовал / usr / local / lib / dtrace, связал узел и снова переименовал каталог. После этого узел работал как положено.

Алекс Майбург
источник
0

Я боролся с этим некоторое время. (для меня "npm uninstall npm -g" ничего не сделал)

Я перепробовал кучу вещей:

npm uninstall npm -g
brew uninstall node
brew install node

У меня все еще были некоторые проблемы, и я получал ошибки, когда пытался связать файлы узла

Наконец я попробовал это

brew link --overwrite node

Это, казалось, исправило это. (он перезаписывает все конфликтующие файлы, а также связывает узел и npm)

Надеюсь это поможет

Tanuj
источник
0

Я полностью удалил заваривание и начал снова, только чтобы снова найти ту же проблему.

Похоже, что Brew работает путем символической ссылки необходимых двоичных файлов в вашу систему, где другие методы установки обычно копируют файлы.

Я нашел существующий набор библиотек узлов здесь:

/usr/local/include/node

После некоторой царапины на голове я вспомнил установку узла на дату против этой старой версии, и это не было сделано с помощью brew.

Я вручную удалил всю эту папку и успешно связал npm.

Это объясняет, почему использование brew uninstall или даже удаление brew само по себе не дало никаких результатов.

Ответ с наивысшим рейтингом объясняет это очень просто, но я решил добавить свои замечания о том, почему это необходимо.

Я предполагаю, что куча проблем с другими пакетами brew может быть вызвана тем, что мешают старые не-brew экземпляры пакетов.

Генри
источник
0

Разрушил мою голову на узле символьных ссылок ... и, похоже, ничего не получалось ... но, наконец, сработало установление правильных разрешений. Этот 'sudo chown -R $ (whoami) / usr / local' сделал работу для меня.

Shahsayyad
источник
0

Я исправил это в El Capitan с помощью следующей команды. Честно говоря, понятия не имею, что он делает, но думал, что поделюсь, так как это решило мою проблему.

brew link --overwrite node
Fizzix
источник
-5

Вам необходимо удалить пакет npm вручную.

первый узел отвязки: brew link -n node

удалить папку npm: rm -R /usr/local/Cellar/node/0.8.10/lib/node_modules/npm

ссылка снова: brew link node

будет мягкая ссылка на новое местоположение npm

soenke
источник
5
Разве это не удаляет НОВЫЙ npm, который пытается установить brew? После этого я остался без установленного npm, а удаление старой папки npm, как в моем ответе, работает.
natevw
мне кажется, что вы тоже пытаетесь удалить новый пакет - в то время как, конечно, нужно удалить старый? Я действительно обнаружил, что для / usr / local / bin / npm осталась символическая ссылка
Caroline