Lỗi: Bước 'liên kết bia' không hoàn thành thành công


158

Tôi đang cố gắng cài đặt node.js qua Homebrew. Thật không may, tôi nhận được lỗi này:

  ~  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

Vì vậy, sau đó tôi cố gắng liên kết nút thủ công ...

  ~  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

Không có may mắn, vì vậy tôi cố gắng liên kết nút mạnh mẽ ...

  ~  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

Tôi không quen thuộc với dtrace trong bất kỳ vấn đề nào và tôi sợ làm hỏng các quyền, vì vậy tôi đã cố gắng 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.

Tôi đã thử gỡ cài đặt nút thông qua brew uninstall nodevà thử lại cài đặt mà không gặp may.


Tôi không thể tự động hóa. mongodb và nút để liên kết với homebrew
pixel 67

Câu trả lời:


136

Gói homebrew cho node.js hiện bao gồm npm một lần nữa, vì vậy điều này đã xảy ra với tôi khi tôi bỏ lỡ thông báo của gói homebrew về việc xóa phiên bản độc lập trước.

Giả sử, giống như tôi, bạn đã phá vỡ nút / npm bằng cách thử nâng cấp trước khi biết npm uninstall npm -gtrước, bạn có thể rm -rf /usr/local/lib/node_modules/npmvà sau đó brew link node. Điều này loại bỏ gói npm tự lưu trữ độc lập (chứ không phải là một loại bia muốn cài đặt) và cho phép ủ symlink gói của nó từ Cellar.


9
Sau khi bạn xóa npm, bạn cần đóng và mở lại thiết bị đầu cuối của mình để xóa nó khỏi đường dẫn của bạn để liên kết hoạt động chính xác, như @dain đã đề cập trong bình luận của mình.
kflorence

Điều này làm việc cho tôi. Trong trường hợp của tôi, tôi không thể liên kết Elixir và Erlang trong quá trình nâng cấp. Các thư mục quan tâm không thuộc sở hữu của tên người dùng của tôi, nhưng thuộc sở hữu của "root". Tôi quyết định xóa các thư mục và cài đặt lại.
Huấn luyện viên Roebuck

Khi tôi thử nút liên kết tôi nhận được: * Lỗi: Không có keg như vậy: / usr / local / Cellar / node * | có ý kiến ​​gì không
SuperUberDuper

1
Sau khi cố gắng nâng cấp npm, tôi đã dành một giờ để cố gắng tìm ra điều này. Brew sẽ không cho phép tôi liên kết cho đến khi phiên bản độc lập bị xóa đầu tiên. Khuyến nghị từ nate làm việc cho tôi.
Brandon Clapp

Làm thế nào để tôi cài đặt lại npm? Hoặc nó được cài đặt với nút cài đặt bia?
marciokoko

153

Tôi chạy Mac OS X Mavericks. Tôi đã cố gắng cài đặt nút 0.10.25 và câu trả lời hàng đầu không hoạt động với tôi.

natevw nói với rm -rf /usr/local/lib/node_modules/npmnhưng nếu các quyền trên /usr/local/lib/node_modulestrông như thế này:

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

sau đó brew sẽ không thể tạo symlink npm của nó trong thư mục đó. Đây là giải pháp của tôi:

Bước 1: Cập nhật Homebrew

$ brew update

Bước 2: Xóa nút / npm ở mọi nơi trên hệ thống của bạn

Một số lệnh này không cần thiết tùy thuộc vào cách bạn đã cài đặt nút / npm trong quá khứ.

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

Lưu ý: Tôi đã có các tệp nút đi lạc mà tôi tìm thấy bằng cách chạy brew -v link node(điều này mang lại cho tôi đầu ra dài dòng của các lỗi liên kết mà hãng bia đang phàn nàn). Bạn có thể cần phải:

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

Bước 3: Mở một thiết bị đầu cuối mới và cài đặt nút

$ brew install node

1
Cảm ơn! Điều này đã giúp tôi rất nhiều và khắc phục vấn đề của tôi. +1
Ricky Mutschlechner

5
Làm việc cho tôi ... mặc dù tôi phải xóa thư mục node_modules (kết thúc bằng 's') ...
songololo

1
Điều này sẽ trở thành câu trả lời được chấp nhận. Có liên quan cho Yosemite quá.
Rog

1
Điều này cũng làm việc cho tôi, tuy nhiên tôi đã phải chạy lệnh chown này để cuối cùng cho phép liên kết. sudo chown -R whoami/ usr / local Sauce
straubcreative

1
Để xóa nút ở mọi nơi trên máy Mac của bạn, tôi đã theo dõi bài viết này: stackabuse.com/how-to-uninstall-node-js-from-mac-osx
ankitkpd 29/03/18

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

sẽ làm tốt như đã đề cập trong các trang web khắc phục sự cố

https://github.com/Homebrew/homebrew/wiki/troubledh Boot


3
Tôi ngạc nhiên khi họ đề nghị điều này. Sẽ không tốt hơn để làm: sudo chmod -R g+w /usr/local(mặc dù thành thật mà nói, cả hai đều làm tôi sợ)
getWeberForStackExchange

@getWeberForStackExchange Tôi đã thử những gì bạn nói nhưng nó không tạo ra sự khác biệt cho tôi. Bất kỳ ý tưởng tại sao đó có thể là?
F1lt3r

@AlistairMacDonald Bạn có thể đã giải quyết vấn đề này ngay bây giờ, nhưng có lẽ tôi cần thêm thông tin để tìm ra lý do tại sao bạn gặp rắc rối. Thay đổi quyền sở hữu mọi thứ trong / usr / local được cho là cho phép người dùng hiện tại tạo các liên kết nút trong cấu trúc / usr / local. Tôi đã đề xuất chỉ thay đổi quyền của nhóm của mỗi tệp thay vì quyền sở hữu, điều này hơi điên rồ hơn một chút. Lệnh của tôi giả định rằng người dùng của bạn là một phần của nhóm sở hữu tất cả / usr / local. Cũng có thể có các nhóm khác nhau trong / usr / local, sẽ yêu cầu một chgrplệnh.
getWeberForStackExchange

Tôi đã cài đặt home-brew theo OS X 10.11 đặc biệt để có được chỉ huy nửa đêm và wget. Tôi chưa cài đặt npm. Bước "liên kết bia" không thành công như được mô tả trong câu hỏi trong quá trình cài đặt mc. Câu trả lời này đã làm việc cho tôi; Tôi đã thực hiện thay đổi, chạy lại liên kết với "chỉ huy liên kết nửa đêm", sau đó chạy tốt. Sau đó, gõ "mc" vào dòng lệnh sẽ đưa ra chỉ huy nửa đêm như mong đợi. Sau đó, "brew install wget" hoạt động mà không cần phô trương. Câu trả lời chính xác.
fyngyrz

lệnh này được khuyến nghị bởi brew doctor, nhưng tôi thích sudo su, thực hiện các lệnh sau đó đóng thiết bị đầu cuối
jchnxu

37

Có lẽ bạn đã cài đặt một phiên bản cũ hơn của node.js bằng một phương thức khác, vì vậy bạn cần xóa thủ công các tệp đang theo cách của brew.

Làm brew link -n nodevà xóa thủ công các tệp và thư mục xung đột, sau đó thử brew link nodelại.


4
Mất một thời gian, nhưng chỉ là những gì tôi cần làm. Cảm ơn :)
Christoffer

Tôi có cùng một vấn đề với aspell. Làm cách nào để tìm các tệp và thư mục xung đột?
LWZ

33

Tôi đến hơi muộn, điều làm việc cho tôi là thế này:

* 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

Mọi thứ đã thành công sau chuỗi này


Điều này cuối cùng đã làm việc cho tôi. Tôi đã gặp sự cố sau khi tôi cố gắng cài đặt nút qua brew sau khi đã cài đặt npm. Nó về cơ bản đã phá vỡ npm cho tôi. Tôi đã phải rm -rf thư mục npm sau đó cài đặt qua brew (gỡ cài đặt npm không còn làm việc cho tôi nữa). Sau đó, các bước còn lại hoạt động hoàn hảo.
rdrobinson3

5
sudo chmod 777Đây không bao giờ là giải pháp phù hợp, nếu bạn gặp sự cố về quyền, hãy điều tra lý do tại sao chúng xảy ra và đặt mức cấp phép tối thiểu cần thiết để thực hiện công việc. Lệnh này sẽ cho phép tập tin được sửa đổi bởi bất kỳ ai trên hệ thống.
bobmagoo

Xuất sắc. Cảm ơn bạn. Mặc dù tôi không gặp vấn đề gì khi chạy brew link nodelần đầu tiên.
Bede Constantinides

Thay vì chmod thư mục đó tôi chỉ sở hữu nó. chown myuser -R -v / usr / local / lib / dtrace / Tôi cũng gặp vấn đề là dtrace không tồn tại như một thư mục. Các lỗi là như nhau, nhưng không có thư mục có mặt.
Jason Short

15

Thử cái này. Có từ một tài liệu tham khảo khác và làm việc cho tôi.

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 nodelà vé
nguyên mẫu

Đây là vé! Vì một số lý do, tôi đã phải chạy nâng cấp brew 2X và lần thứ hai nó yêu cầu tôi cài đặt bản cập nhật cho XCode. Giữa brew link --overwrite nodevà lệnh cuối cùng, tất cả dường như hoạt động. Lệnh cuối cùng mà bạn đề xuất không hoạt động vì 'sudo. Thay vào đó, hãy sử dụngbrew postinstall node
Dani Amsalem

10

Tôi gặp vấn đề tương tự sau khi chuyển tất cả các ứng dụng của mình từ máy Mac cũ sang máy mới.

Tôi tìm thấy giải pháp bằng cách chạy brew doctor:

Cảnh báo: Các liên kết bị hỏng đã được tìm thấy. Loại bỏ chúng bằngbrew prune

Sau khi chạy brew prune, Homebrew cuối cùng đã trở lại đúng hướng :)


4

Vấn đề của tôi đã có một giải pháp hơi khác nhau. Thư mục trong đó brew muốn tạo các liên kết tượng trưng không thuộc sở hữu của người dùng hiện tại.

ls -la /usr/local/bin/lib/node | grep node mang lại:

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

Đối với tôi, sau đây đã sửa nó:

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

ps. $(users)sẽ được mở rộng sang tên người dùng của bạn, giúp tôi tránh xa các mục sao chép lười biếng;)


2
Tôi gặp vấn đề tương tự. Điều này rõ ràng có thể xảy ra nếu bạn chạy "make install" cho một số ứng dụng khác theo cách thủ công. Gần đây tôi đã làm điều đó và giải pháp là chown như bạn đã làm.
Richard T Ink

4

thx @suweller.

Tôi đã khắc phục sự cố:

  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

Tôi đã có cùng một vấn đề như 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

vì vậy tôi đã khắc phục vấn đề này bằng cách:

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

Sau khi tôi khắc phục vấn đề này, tôi đã có một vấn đề khác:

  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

Vì vậy, tôi đã loại bỏ node.d bằng cách:

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

có một lỗi cho phép khác:

  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.

và sửa nó:

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

và cuối cùng mọi thứ đã hoạt động:

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

3

Hầu hết các sự cố cài đặt brew với nút là do lỗi cấp phép hoặc có nút được cài đặt trước đó và sau đó cố gắng cài đặt nó thông qua brew. Giải pháp hiệu quả với tôi cuối cùng là:

CẢNH BÁO: Điều này sẽ gỡ cài đặt nodejs (nhiều phiên bản) sử dụng một cách thận trọng:

  1. Xóa nút qua brew:

    nút gỡ cài đặt

  2. cũng đã làm thông qua vũ lực:

    nút gỡ cài đặt bia - lực lượng

  3. Để sử dụng tập lệnh Nguồn: Xóa nút :

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

Sau đó:

chmod +x /path/to/terminatenode.sh

Sau đó:

./terminatenode.sh .
  1. Sau đó đảm bảo thực hiện lệnh sau:

    chown $ USER / usr / địa phương

  2. Sau đó thực hiện cập nhật bia (tiếp tục làm điều này cho đến khi tất cả mọi thứ được cập nhật):

    cập nhật bia

  3. Làm sạch bia và chạy cập nhật lại (có thể là dư thừa) và chạy bác sĩ để đảm bảo mọi thứ được đặt đúng chỗ:

    dọn dẹp bia; cập nhật bia; bác sĩ pha chế

  4. Và cuối cùng cài đặt nút thông qua brew (verbose):

    nút cài đặt bia


Các số không định dạng chính xác ... nhưng các bước ở đó. Sẽ sửa vấn đề định dạng vào ngày mai.
AhsenB

2

câu trả lời cuối cùng: thay đổi chủ sở hữu của thư mục đó thành bất kể bạn là ai

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

Điều này cũng được khuyến nghị bởi brew nếu bạn chạy brew Doctor


2

Tôi đã gặp lỗi trong khi cài đặt không thể liên kết nút và / usr / local / bao gồm không thể ghi được

Giải pháp dưới đây làm việc cho tôi: - Đầu tiên tạo thư mục bao gồm, lưu ý rằng điều này đòi hỏi đặc quyền sudo

cd /usr/local

sudo mkdir include

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

brew link node

1

Tôi cũng đã quản lý để làm rối NPM của mình và cài đặt các gói giữa các phiên bản Homebrew này và cho dù tôi đã hủy liên kết / liên kết và gỡ cài đặt / cài đặt nút bao nhiêu lần thì nó vẫn không hoạt động.

Hóa ra, bạn phải xóa NPM khỏi đường dẫn nếu không Homebrew sẽ không cài đặt nó: https://github.com/mxcl/homebrew/blob/master/L

Hy vọng điều này sẽ giúp được ai đó có cùng vấn đề và tiết kiệm được khoảng thời gian đó hoặc lâu hơn tôi đã phải bỏ ra để tìm kiếm vấn đề ...


Cảm ơn bạn. Tôi đã phải làm điều này kết hợp với câu trả lời được bình chọn cao nhất để làm cho nó hoạt động đúng.
kflorence

1

bởi Finder, Xóa tệp này:

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

trong thiết bị đầu cuối:

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

sau đó:

$ brew link node

1
Khi tôi chạy brew link --overwrite --dry-run node, tôi thấy lỗi No such keg: /usr/local/Cellar/node. Tôi đang thiếu gì?
PKHunter

1

Tôi đã thử tất cả các phương pháp và không có phương pháp nào hoạt động. Cách dễ nhất là cài đặt lại nút từ https://nodejs.org/en/doad/

Đơn giản chỉ cần tải về pkgvà cài đặt nó. Bây giờ tôi có một công việc npmnodemột lần nữa.


0

Không biết, nếu đó là một ý tưởng tốt hay không: Sau khi thử tất cả các giải pháp khác mà không thành công, tôi chỉ đổi tên / usr / local / lib / dtrace, nút được liên kết và đổi tên lại thư mục. Sau đó, nút làm việc như mong đợi.


0

Tôi đã vật lộn với điều này trong một thời gian. (đối với tôi "npm gỡ cài đặt npm -g" không làm gì cả)

Tôi đã thử một loạt các điều:

npm uninstall npm -g
brew uninstall node
brew install node

Tôi vẫn gặp một số vấn đề và đã gặp lỗi khi tôi cố gắng liên kết các tệp nút

Cuối cùng tôi đã thử nó

brew link --overwrite node

Điều đó dường như đã sửa nó. (nó ghi đè lên các tệp xung đột và cũng liên kết nút và npm)

Hi vọng điêu nay co ich


0

Tôi hoàn toàn gỡ cài đặt brew và bắt đầu lại, chỉ để tìm lại vấn đề tương tự.

Brew dường như hoạt động bằng cách liên kết các nhị phân cần thiết vào hệ thống của bạn, nơi các phương thức cài đặt khác thường sao chép các tệp.

Tôi tìm thấy một bộ thư viện nút hiện có ở đây:

/usr/local/include/node

Sau khi gãi đầu, tôi nhớ cài đặt nút vào ngày so với phiên bản cũ này và nó đã không được thông qua brew.

Tôi đã tự xóa toàn bộ thư mục này và liên kết thành công npm.

Điều này sẽ giải thích tại sao sử dụng bia gỡ cài đặt hoặc thậm chí gỡ cài đặt bia tự nó không có hiệu lực.

Câu trả lời được xếp hạng cao nhất đặt ra điều này rất đơn giản, nhưng tôi nghĩ tôi sẽ thêm những quan sát của mình về lý do tại sao nó lại cần thiết.

Tôi đoán một loạt các vấn đề với các gói sản xuất bia khác có thể là do các trường hợp cũ của các gói không được sản xuất.


0

Đã phá hỏng đầu của tôi trên nút liên kết tượng trưng .. và dường như không có gì hoạt động ... nhưng cuối cùng, điều làm việc là thiết lập các quyền phù hợp. Điều này 'sudo chown -R $ (whoami) / usr / local' đã làm việc cho tôi.


0

Tôi đã sửa lỗi này trong El Capitan bằng cách sử dụng lệnh sau. Thành thật mà nói, không biết nó làm gì, nhưng tôi nghĩ tôi sẽ chia sẻ vì nó đã khắc phục vấn đề của tôi.

brew link --overwrite node

-5

Bạn cần loại bỏ gói npm bằng tay.

nút hủy liên kết đầu tiên: brew link -n node

xóa thư mục npm: rm -R /usr/local/Cellar/node/0.8.10/lib/node_modules/npm

liên kết lại: brew link node

sẽ có một liên kết mềm đến vị trí mới của npm


5
Điều này không loại bỏ npm MỚI mà brew đang cố cài đặt sao? Theo dõi điều này để lại cho tôi mà không cài đặt npm làm việc, trong khi xóa thư mục npm OLD như trong câu trả lời của tôi hoạt động.
17:30

đối với tôi có vẻ như bạn đang cố gắng loại bỏ gói mới - trong khi chắc chắn đó là gói cũ cần gỡ bỏ? Tôi thực sự thấy rằng có một symlink còn sót lại cho / usr / local / bin / npm
Caroline
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.