Không thể sử dụng NVM từ gốc (hoặc sudo)


104

Tôi đã đề cập rằng ứng dụng của tôi sử dụng phiên bản NodeJS khác khi chạy từ đó sudo.

$ node -v
v0.10.23
$ sudo node -v
v0.11.8-pre

Phiên bản trước v0.11.8 này gây ra cho tôi một số vấn đề, vì vậy tôi chắc chắn không muốn sử dụng nó, nhưng tôi không thể thay đổi nó để root.

$ sudo nvm use v0.10.23
sudo: nvm: command not found

Tôi đã cố gắng cài đặt nvm từ người dùng root, nhưng gặp lỗi "NVM đã được cài đặt", nhưng vẫn không tìm thấy nvm khi chạy từ sudo. Vấn đề của tôi là gì?


3
Hãy thử sudo -s rồi cài đặt nvm.
Trò chơi Brainiac

@GamesBrainiac Xin lỗi, nhưng tôi đã viết rằng tôi đã cố gắng để cài đặt nó từ gốc
Vitalii Korsakov

cố gắng xóa /root/.nvm/ và cài đặt lại nvm từ đầu
Antonio E.

không có /root/.nvm. Tôi đã cài đặt nvm từ sudo và nó đã được cài đặt vào sử dụng homedir thường xuyên
Vitalii Korsakov

4
Điều này giải quyết tất cả vấn đề của tôi vì bạn đã có github.com/xtuple/nvm
Yoo Matsuo

Câu trả lời:


219

Danh sách lệnh dưới đây (nguồn: digitalocean ) dường như khắc phục được sự cố

n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local

Lệnh trên hơi phức tạp, nhưng tất cả những gì nó làm là sao chép bất kỳ phiên bản nào của nút mà bạn đang kích hoạt thông qua nvm vào /usr/local/thư mục (nơi người dùng đã cài đặt tệp toàn cầu sẽ nằm trên VPS linux) và thiết lập quyền để tất cả người dùng có thể truy cập chúng .

Hi vọng điêu nay co ich!


7
Cảm ơn, nó đã giúp tôi.
Vishal Kumar Verma

7
Cảm ơn bạn! Đây lưu lại cho tôi rất nhiều thời gian
Quinton Pike

4
Hoàn hảo! Cảm ơn bạn rất nhiều.
Jean-Baptiste Louazel

2
Tuyệt vời! Đêm qua, tôi đã phá hỏng toàn bộ hệ thống RasPi 3 của mình bằng cách cố tình thay đổi quyền cho npm khắp nơi, hôm nay tôi đã dành 3 giờ để tìm giải pháp tốt nhất để cài đặt node / npm trên toàn cầu mà không cần sudo cho mỗi lần gọi npm. Giải pháp của bạn diễn ra tốt đẹp với bài đăng này losant.com/blog/how-to-install-nodejs-on-raspberry-pi
bosch

3
Đây âm thanh như một lựa chọn tuyệt vời, nhưng tôi cứ bị các lỗi:chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-debug’ chmod: cannot operate on dangling symlink ‘/home/ec2-user/.nvm/versions/node/v7.1.0/bin/node-inspector’
trex005

129

Giải pháp của tôi là tạo các liên kết tượng trưng từ các phiên bản nodenpmtôi đang sử dụng để /usr/local/bin:

sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"

Điều này làm cho npmnodecó sẵn cho tất cả người dùng.


1
Giải pháp tuyệt vời. chỉ cần thêm "vào cuối dòng thứ hai ... (Tôi không thể chỉnh sửa này bản thân mình vì một lý do)
Rayee Roded

1
Tuyệt vời, đây là giải pháp tốt nhất. Bằng cách này, root sẽ luôn sử dụng cùng một phiên bản npm / node mà bạn đang sử dụng trên người dùng nvm, cảm ơn!
luiscvalmeida 27/07/17

3
Giải pháp tuyệt vời, nhưng nếu bạn thay đổi phiên bản nút đang sử dụng, bạn sẽ phải chạy lại các lệnh trên.
door_number_three,

4
Tôi sử dụng npxkhá thường xuyên. Vì vậy, tôi cũng đã thêm nó vào:sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
thomas

@SimpleJ làm thế nào bạn cũng sẽ làm như vậy đối vớibabel-node
user566245 22/02/19

14

Vấn đề của bạn là, nó nvmkhông nằm trong đường dẫn khi bạn sử dụngsudo .

Vì vậy, loại

$ which nvm

và kết quả sẽ giống như

/home/abc/mynvm/nvm

Hãy thử lại ngay bây giờ với sudo :

sudo /home/abc/mynvm/nvm use v0.10.23

Tôi giả sử sau đó bạn gặp phải sự cố rằng người dùng root không thể tìm thấy phiên bản 0.10.13, nhưng hãy xem thông báo lỗi tiếp theo ...


42
which nvmkhông có gì kết quả đầu ra
Vitalii Korsakov

6
nó ra gì cho rễ cũng
Vitalii Korsakov

3
Vấn đề là tôi không bao giờ đăng nhập bằng quyền root. Tại sao phải là tôi? Nếu tôi cần bất kỳ quyền truy cập root nào, tôi luôn sử dụng sudo. Có, tôi có thể đăng nhập bằng quyền root và cài đặt nvm, nhưng trong tương lai, tôi không thể chạy sudo nvm use v0.10.25. Vì vậy, tôi cũng không thể sử dụng sudo nodetừ người dùng.
Vitalii Korsakov

2
which nvmkhông bao giờ hoạt động, phải không? nvmkhông phải là một tệp thực thi, nó là một hàm shell. github.com/creationix/nvm/issues/540
Matt

2
Gần đây tôi đã hỏi một câu hỏi tương tự về which nvmđây: stackoverflow.com/questions/49156104/… Sử dụng type nvmđể tiết lộ định nghĩa của nó. Như Matt đã nói, đó là một hàm shell.
Martin Braun

13

Lý do cơ bản là vì nvmkhông phải là một chương trình thực. Đó là một chức năng bash đó được nạp vào người dùng của .profile, .bashrchoặc ... Vì vậy, sudokhông tự động nhặt nó lên từ $ PATH giống như hầu hết các chương trình khác.

Trình quản lý phiên bản nút thay thế là n: https://github.com/tj/n . Đó là một chương trình thực, vì vậy sudosẽ lấy nó qua $ PATH mà không có bất kỳ hack nào (miễn là sudo/usr/local/bintrong $ PATH của nó).

sudo npm install -g n  # install 'n' globally
which n                # should be /usr/local/bin/n

sudo n lts             # need sudo to switch node versions
node --version         # v6.10.0
sudo node --version    # v6.10.0

Hoàn hảo. Cảm ơn "nvm không phải là một vấn đề, nhưng một chức năng bash" :)
khác

Haha, mới nhận ra về "vấn đề" viết sai chính tả của mình thay vì "chương trình";).
khác

7

Theo README

Khi sử dụng nvm, bạn không cần phải sudocài đặt toàn cục một mô-đun với npm -g, vì vậy thay vì làm sudo npm install -g grunt, hãy làmnpm install -g grunt

Cần sudo npm?

Trong trường hợp của tôi, tôi cần sudo npm run startquyền truy cập vào một số tệp yêu cầu quyền truy cập root. Theo vấn đề này ,

Bạn không sử dụng sudo. Thay vào đó, bạn nên chmod / chown tệp để người dùng có nvm có quyền truy cập vào tệp ;.

Tóm lại

Người bảo trì nvm thực sự tin rằng chúng ta không cần sudo: P


6

Tôi cũng có vấn đề của bạn. Cuối cùng tôi đã làm việc xung quanh nó. Đây là giải pháp của tôi:

  1. Gỡ cài đặt nvm và nodejs. Dưới đây là một số liên kết hữu ích: Gỡ cài đặt nvm . Nếu bạn đã cài đặt nodejs bằng apt-get, bạn có thể gỡ cài đặt nó bằng lệnh apt-get purge nodejs.
  2. Cài đặt nvm toàn cầu. Xem trang này: nvm toàn cầu . Như nó nói, "nvm chuẩn đã biết những khó khăn khi hoạt động trong môi trường nhiều người dùng hoặc đã root."

Sau khi khởi động lại thiết bị đầu cuối, bạn có thể chạy lệnh sudo nvm ls.


1
Nhánh này là 12 cam kết phía trước, 1123 cam kết phía sau creationix: master. lấy thẳng từ repo xtuple cho nvm
MrMesees

6
$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3

4

Tôi đã thử tương tự trên máy của mình, nơi tôi nvmcũng có và tôi có một phản hồi khá khác biệt:

$ sudo node --version                                                                                                                                                                    
sudo: node: command not found

Tôi đoán là bạn đã cài đặt nút 0.11 bên ngoài nvm. ( Qua trình quản lý gói hoặc thậm chí từ nguồn )

Do đó, chạy nút thông qua sudo sẽ chọn nút độc lập này thay thế.

Điều đó có ý nghĩa hay tôi nhầm lẫn?


Vâng, bạn đã đúng. Tôi đã cài đặt nút và sau đó là nvm . Nhưng mọi thứ hoạt động OK đối với người dùng bình thường và không hoạt động đối với root.
Vitalii Korsakov

1
Ồ được rồi. Sau đó, tôi nghĩ rằng nvm không có nghĩa là được chạy dưới dạng root. Trong thực tế, tôi khá rằng chạy trong đất của người dùng là một tính năng cần thiết. Tuy nhiên, điều này có thể giúp bạn: github.com/creationix/nvm/issues/5
Aurélien Thieriot

Anh chàng này rõ ràng đã tạo ra một nvm đặc biệt chạy ở chế độ sudo: github.com/xtuple/nvm . Thật không may chỉ trong chế độ sudo. Tôi không biết nếu đó là chấp nhận được
Aurélien Thieriot

0

Cài đặt nvm trên toàn cầu với
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash


tác giả creationix NVM, tôi sẽ rất cẩn thận về nvm của bên thứ ba này ...
MrMesees

4
Nhánh này là 12 cam kết phía trước, 1123 cam kết phía sau creationix: master. Đây là sự cố, vui lòng xóa liên kết
MrMesees

8
Câu trả lời này khiến tôi chảy máu mắt. Bạn chỉ cần không nên tải về bất cứ điều gì và chạy nó trong một bash sudo, wtf
CharlyDelta

Trên thực tế, lệnh wget những ngày đầu trong | bash, không có bất cứ nơi nào sudo: nvm-sh / nvm: Node quản lý phiên bản
Elise van Looij

0

Giải pháp dễ dàng nhất cho điều này có thể là chỉ cần nhấn tệp thực thi nvm.sh ở bất kỳ đâu.

sudo /home/ubuntu/.nvm/nvm.sh install node

Điều này hoạt động tốt đối với tôi (giả sử đó là đường dẫn cài đặt).

Quy trình cài đặt đầy đủ sẽ trông như thế nào

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
export NVM_DIR="/home/ubuntu/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

Và sau đó bạn có thể chạy lệnh trên để truy cập nvm.sh mới được cài đặt

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.