node.js xung đột: / sbin / node vs / usr / bin / node


32

Tôi có hai máy Ubuntu 12.10: máy A là máy ảo VMWare và máy B là máy tính xách tay Acer cũ. Trên cả hai máy, tôi đã cài đặt nút bằng apt-get. Tuy nhiên, máy A cài đặt nhị phân chính là /usr/bin/nodevà máy B là /usr/bin/nodejs. Dưới đây là một số hành vi tôi quan sát thấy:

  1. Cả hai máy trở lại /usr/bin/nodeđể đáp ứng với which nodelệnh. Tuy nhiên, không có tập tin nào như vậy trên máy B.
  2. Phát hành lệnh nodehoạt động cho máy A, không phải B. Trên B, tôi phải sử dụng nodejsthay thế.
  3. Trên B, có một nhị phân gọi là / sbin / nút, A không có nó.

Những hành vi này gây ra vấn đề không nhất quán khi phát triển trên cả hai máy. Hiện tại, tôi đã làm việc xung quanh bằng cách đổi tên các nhị phân trên B như sau:

sudo mv /sbin/node /sbin/node-sbin
sudo ln -s /usr/bin/nodejs /usr/bin/node

Có cách nào để thực sự khắc phục điều này, để nút đó sẽ được cài đặt /usr/bin/nodethay vì /usr/bin/nodejs?

Câu trả lời:


15

Trên Ubuntu 13.10, tất cả các câu trả lời ở trên không hoạt động với tôi. Cuối cùng nó cũng hoạt động khi tôi cài đặt nodejs-legacy

sudo apt-get install nodejs-legacy

Điều này cung cấp chính xác /usr/bin/nodecho tôi, do đó, ví dụ nodemoncó thể được sử dụng.


Bất cứ ý tưởng tại sao chúng ta cần phải cài đặt này? Nó thực sự tạo ra các liên kết tượng trưng bằng cách nào đó? Tại sao nút thay đổi tên thực thi của nó thành nodejs?
Augustin Riedinger

Tên "nút" xung đột với một chương trình cũ hơn nhiều. Xem danh sách.debian.org/debian-devel-announce/2012/07/msg00002.html và câu trả lời của Leftium bên dưới.
Robie Basak

36

update: hướng dẫn sửa đổi bên dưới để sử dụng nodejs-legacygói. ( thông tin thêm về di sản nút )

Hãy thử loại bỏ hoàn toàn gói nút xung đột:

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy

# Confirm it worked
node --version       # v0.10.13
ls -la `which node`  # ... /usr/bin/node -> /etc/alternatives/node

Điều này xảy ra với tôi khi tôi vô tình cài đặt nodegói non-node.js . Mặc dù tôi đã làm apt-get remove nodetrước khi cài đặt nodejsgói chính xác , tôi đoán --purgeđối số là bắt buộc.

Thông tin cơ bản :

Có một xung đột đặt tên với gói nút (Chương trình nút vô tuyến gói nghiệp dư) và nhị phân nodejs đã được đổi tên từ nút thành nodejs. Bạn sẽ cần symlink / usr / bin / node đến / usr / bin / nodejs hoặc bạn có thể gỡ cài đặt Chương trình nút radio vô tuyến gói nghiệp dư để tránh xung đột đó.


Cảm ơn bạn đã thông tin nền. Tại thời điểm này, tôi không có bất kỳ máy nào trong số này để thử, nhưng tôi hy vọng tôi có thể xem lại sớm một ngày nào đó.
Hải Vũ

Điều này không giúp bạn có được /usr/bin/nodeUbuntu 13.10. @ user229115 'câu trả lời dưới đây hoạt động, mặc dù.
Jim Stewart

1
Vì vậy, với Ubuntu 13.10 sudo apt-get install nodejs nodejs-legacysẽ cung cấp cho bạn nodetệp nhị phân dưới dạng node.js Nhưng nếu bạn đã cài đặt node(Chương trình nút vô tuyến gói nghiệp dư), rõ ràng bạn sẽ cần phải xóa nó.
jonasfj

1
@AugustinRiedinger: Tôi đã cập nhật câu trả lời của mình. Tôi nghĩ rằng sự kết hợp của cả việc thanh lọc các gói 'cấu hình sai' và cài đặt nodejs-legacygói sẽ hoạt động.
Leftium

1
Cảm ơn nó rất rõ ràng. Thật vậy, nó hoạt động khi cài đặt nodejs-lecacygói có thể chỉ là một liên kết tượng trưng đến nodejsthực thi thực sự ...
Augustin Riedinger

11

Thật không may cho tôi, việc tạo một liên kết tượng trưng không hoạt động. Những gì đã làm cho tôi mặc dù đã tạo ra một bí danh. Trong ~/.bashrchoặc ~/.bash_aliases(nếu~/.bashrc tải tệp này), chỉ cần thêm dòng sau:

alias node="nodejs"

Khởi động lại phiên bash của bạn bằng cách nhập bashvào bảng điều khiển và bí danh của bạn sẽ hoạt động.


2
Khi tôi tạo một liên kết tượng trưng, ​​nó không hoạt động cho đến khi tôi bắt đầu một thiết bị đầu cuối khác. Hãy thử khởi động lại thiết bị đầu cuối của bạn ... hoặc câu trả lời của tôi hoạt động mà không có liên kết / bí danh ^^
Leftium 16/07/13

@Leftium: Bạn cũng cần chạy: source ~/.bashrcđể tải lại tệp .bashrc (nếu bạn muốn tránh khởi động lại thiết bị đầu cuối) đọc thêm ..
Deepak Joy

Symlinking tại một vị trí mới gần như chắc chắn cần một hash nodelời gọi trong các thiết bị đầu cuối hiện tại của bạn, bởi vì các shell hiện đại nhớ vị trí của các lệnh đã được tìm kiếm trước đó trong PATH. Lệnh hashdựng sẵn trong các shell như vậy bảo họ làm lại việc tra cứu và ghi nhớ vị trí mới.
mtraceur

7

Tôi nghĩ rằng đây là nó:

sudo update-thay thế --install / usr / bin / nút nút / usr / bin / nodejs 10

Sử dụng các lựa chọn thay thế Debian.


Cảm ơn. Đây là cách trực tiếp nhất để khắc phục quyết định của Ubuntu về vấn đề này.
vẽ

@drew có vẻ như Ubuntu đã tuân theo quyết định của Debian về vấn đề này dựa trên lỗi bug Ubuntu.launchpad.net/ubfox/+source/node/+orms/1030421 .
Lloyd Dewolf

1

Trả lời muộn, nhưng để biết thông tin cập nhật ...

Nếu bạn cài đặt node.js bằng phương thức đề xuất từ readme cài đặt nút github , nó sẽ gợi ý làm theo các hướng dẫn trên bài viết blog của nodeource , thay vì cài đặt từ ngày hết hạn apt-get repo, node.js sẽ chạy bằng nodelệnh, cũng nhưnodejs lệnh, mà không cần phải tạo một liên kết tượng trưng mới.

Phương pháp này từ bài viết là:

# Note the new setup script name for Node.js v0.12
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -

# Then install with:
sudo apt-get install -y nodejs

Lưu ý rằng đây là phiên bản v0.12, có thể sẽ trở nên lỗi thời trong tương lai không xa.

Ngoài ra, nếu bạn đứng sau proxy công ty (như tôi), bạn sẽ muốn thêm tùy chọn -E vào lệnh sudo, để duy trì các env vars cần thiết cho proxy:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -

1

Trên Ubuntu 14.04 tôi gặp vấn đề về nút tương tự. Tôi đã không làm việc "nút" và làm việc "nodejs". tôi vừa làm

sudo apt-get remove node

và ngay sau đó, nút đã chạy và nodejs cũng chạy :) Tôi mới sử dụng linux và đó là một sai lầm đối với tôi. Tuy nhiên Bower đang chạy !!!


0
sudo getconf LONG_BIT
sudo uname -p
  • Xác nhận kiến ​​trúc CPU của bạn
  • Tìm bản phân phối node.js của bạn trong cây thư mục tại https://nodejs.org/dist/ (lưu ý: các phiên bản khác nhau của các bản phân phối node.js khác nhau cho các kiến ​​trúc CPU khác nhau)

Máy tính để bàn của tôi hiện là Ubuntu 15.10 AMD64, vì vậy tôi sẽ sử dụng URL sau trong ví dụ cài đặt của mình (một lần nữa, khác nhau của distrib):

sudo wget https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x64.tar.gz

Sau đó thay đổi thư mục vào thư mục tải xuống của bạn :

sudo cd /home/name/Downloads

Từ thư mục tải xuống của bạn, thực hiện như sau:

sudo tar -C /usr/local --strip-components 1 -xzf node-v5.0.0-linux-x64.tar.gz

Xác nhận cài đặt node.js của bạn bằng cách sau:

sudo ls -l /usr/local/bin/node
sudo ls -l /usr/local/bin/npm

tham chiếu http://www.hostingadvice.com/how-to/install-nodejs-ubfox-14-04/


1
-1 Chỉ tarcần lệnh sudo.
muru

+1 Cảm ơn bạn rất nhiều vì cách tốt hơn - cách tốt nhất cho tôi!
1111161171159459134
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.