루트 (또는 sudo)에서 NVM을 사용할 수 없습니다.


104

.NET에서 실행할 때 내 애플리케이션이 다른 버전의 NodeJS를 사용한다고 언급했습니다 sudo.

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

v0.11.8-pre로 인해 몇 가지 문제가 발생했기 때문에 사용하고 싶지는 않지만 루트로 변경할 수는 없습니다.

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

루트 사용자로부터 nvm을 설치하려고했지만 "NVM이 이미 설치되었습니다"라는 오류가 발생했지만에서 실행할 때 여전히 nvm을 찾을 수 없습니다 sudo. 내 문제는 무엇입니까?


3
시도 sudo -s 설치합니다 nvm.
Games Brainiac 2014 년

죄송합니다 @GamesBrainiac,하지만 난 루트에서 설치하려고했습니다 썼다
Vitalii 코르사코프을

처음부터 /root/.nvm/ 및 재설치 NVM을 삭제하려고
안토니오 E.

/root/.nvm이 없습니다. 나는 sudo는에서 NVM를 설치 한 그것은 일반 사용자 홈 디렉토리에 설치
Vitalii 코르사코프

4
당신이 가지고로이 해결할 수있는 문제 내 모든 문제 github.com/xtuple/nvm
유 마츠오

답변:


220

아래 명령 목록 (출처 : digitalocean )이 문제를 해결하는 것 같습니다.

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

위의 명령은 약간 복잡하지만 nvm을 통해 활성화 된 노드 버전을 /usr/local/디렉토리 (사용자가 설치 한 전역 파일이 Linux VPS에 있어야 함 )에 복사 하고 모든 사용자가 액세스 할 수 있도록 권한을 설정하는 것 뿐입니다. .

도움이 되었기를 바랍니다!


7
감사합니다. 도움이되었습니다.
Vishal Kumar Verma 2015 년

7
감사합니다! 이것은 나에게 많은 시간 저장
퀸튼 파이크

4
완전한! 정말 고맙습니다.
Jean-Baptiste Louazel 16.04.07

2
대박! 어제 밤에 npm에 대한 권한을 필사적으로 변경하여 전체 RasPi 3 시스템을 망쳤습니다. 오늘은 각 npm 호출에 대해 sudo없이 노드 / npm을 전역 적으로 설치하는 최상의 솔루션을 찾기 위해 3 시간을 보냈습니다. 귀하의 솔루션은이 게시물에 잘 갔다 losant.com/blog/how-to-install-nodejs-on-raspberry-pi
보쉬

3
이것은 훌륭한 옵션처럼 들리지만 다음과 같은 오류가 계속 발생합니다.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

내 솔루션의 버전 심볼릭 링크 만드는 것입니다 nodenpmI가 사용하고 있습니다를 /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"

이는하게 npm하고 node모든 사용자가 사용할.


1
훌륭한 솔루션입니다. 두 번째 줄 끝에 "를 추가하십시오 ... (나는 어떤 이유로 든 직접 편집 할 수 없었습니다)
Rayee Roded

1
좋습니다. 이것이 최고의 솔루션입니다. 이런 식으로 루트는 항상 nvm 사용자에서 사용중인 것과 동일한 npm / 노드 버전을 사용합니다. 감사합니다!
luiscvalmeida

3
훌륭한 솔루션이지만 사용중인 노드의 버전을 변경하면 위의 명령을 다시 실행해야합니다.
door_number_three 2018

4
나는 npx자주 사용 합니다. 그래서 나는 그것을 추가했습니다 :sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"
thomas

@SimpleJ 당신은 어떻게 똑같이 할 것인가babel-node
user566245

14

문제는 nvm사용할 때 경로에 없다는 것입니다.sudo 입니다.

그래서 입력

$ which nvm

결과는 다음과 같습니다.

/home/abc/mynvm/nvm

지금 다시 시도하십시오 sudo:

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

그런 다음 루트 사용자가 0.10.13 버전을 찾을 수 없다는 문제가 발생했다고 가정하지만 다음 오류 메시지를 볼 수 있습니다.


42
which nvm출력 아무것도
Vitalii 코르사코프

6
그것은뿐만 아니라 루트 아무것도 출력하지 않습니다
Vitalii 코르사코프

3
문제는 내가 루트로 로그인하지 않는다는 것입니다. 왜 그래야합니까? 루트 액세스가 필요한 경우 항상 sudo. 예, 루트로 로그인하여 nvm을 설치할 수 있지만 나중에 실행할 수 없습니다 sudo nvm use v0.10.25. 그래서 sudo node사용자도 사용할 수 없었 습니다.
Vitalii Korsakov 2014 년

2
which nvm작동하지 않습니까? nvm실행 파일이 아니라 셸 기능입니다. github.com/creationix/nvm/issues/540
Matt

2
나는 최근에 대한 비슷한 질문을 which nvm여기에 : stackoverflow.com/questions/49156104/... 사용하여 type nvm정의를 공개. Matt가 말했듯이 쉘 기능입니다.
Martin Braun

13

근본적인 이유는 nvm실제 프로그램 이 아니기 때문 입니다. 그것은 사용자에로드되는 bash는 기능이다 .profile, .bashrc또는 ... 그래서이 sudo자동으로 대부분의 다른 프로그램처럼은 $ PATH에서 그것을 선택하지 않습니다.

또 다른 노드 버전 관리자입니다 n: https://github.com/tj/n . 실제 프로그램이 즉, 그래서 sudo(만큼 어떠한 해킹없이 $ 경로를 통해 그것을 선택할 것 sudo가지고 /usr/local/bin는 $ PATH에).

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

완전한. 감사합니다 "nvm은 문제가 아니지만 bash 함수입니다":)
또 다른

하하, 방금 "프로그램"대신 내 철자 오류 "문제"에 대해 깨달았습니다;).
또 다른

7

README 에 따르면

nvm을 사용할 때를 사용하여 sudo모듈을 전역 적으로 설치할 필요 가 npm -g없으므로 대신 수행하십시오 sudo npm install -g grunt.npm install -g grunt

sudo npm이 필요하십니까?

제 경우에는 sudo npm run start루트 액세스가 필요한 일부 파일에 대한 액세스가 필요합니다. 이 문제 에 따르면 ,

당신은 사용하지 마십시오 sudo. 대신 nvm이있는 사용자가 파일에 액세스 할 수 있도록 파일을 chmod / chown해야합니다.

요약해서 말하면

nvm의 관리자는 우리가 다음을 수행 할 필요가 없다고 강력하게 믿습니다 sudo.


6

나도 너의 문제가 있었다. 마침내 나는 그것을 해결했습니다. 내 해결책은 다음과 같습니다.

  1. nvm 및 nodejs를 제거하십시오. 다음은 몇 가지 유용한 링크입니다. Uninstallation of nvm . apt-get을 사용하여 nodejs를 설치 한 경우 명령을 사용하여 제거 할 수 있습니다 apt-get purge nodejs.
  2. 글로벌 nvm을 설치합니다. 이 페이지를 참조하십시오 : nvm global . "Standard nvm은 다중 사용자 또는 루팅 된 환경에서 작업하는 데 어려움이있는 것으로 알려져 있습니다."

터미널을 다시 시작한 후 명령을 실행할 수 있습니다 sudo nvm ls.


1
이 분기는 12 개의 커밋이 앞서 있고, 1123 개는 creationix : master 뒤에 커밋됩니다. NVM에 대한 xtuple의의 repo에서 바로 촬영
MrMesees

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

4

나는 내가 가지고있는 내 컴퓨터에서도 똑같이 시도했으며 nvm약간 다른 응답이 있습니다.

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

내 생각 엔 nvm 외부에 0.11 노드를 설치했다고 생각합니다. ( 패키지 관리자를 통해 또는 소스에서 )

따라서 sudo를 통해 노드를 실행하면이 독립형 노드가 대신 선택됩니다.

그게 말이 되나요, 아니면 제가 잘못 했나요?


네, 맞아요. 나는 nodenvm을 설치 했다 . 그러나 모든 것이 일반 사용자에게는 정상적으로 작동하고 루트에게는 작동하지 않습니다.
Vitalii Korsakov

1
아, 알았어. 그렇다면 nvm은 루트로 실행되는 것이 아니라고 생각합니다. 사실 저는 사용자 영역에서 실행하는 것이 원하는 기능이라는 점이 예쁩니다. 그러나이 당신을 도울 수 있습니다 github.com/creationix/nvm/issues/5
오렐리 Thieriot

이 사람은 sudo 모드에서 실행되는 특별한 nvm을 만든 것 같습니다 : github.com/xtuple/nvm . 불행히도 sudo 모드에서만. 이 허용 있는지 모르겠어요
오렐리 Thieriot에게

0

다음을 사용하여 전역 적으로 nvm 설치
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash


creationix의 저자는 ... 내가이 타사 NVM에 대해 매우 조심 것, NVM
MrMesees

4
이 분기는 12 개의 커밋이 앞서 있고, 1123 개는 creationix : master 뒤에 커밋됩니다. 이 문제가 링크 제거하십시오
MrMesees

8
이 대답은 내 눈을 피 가게합니다. 당신은 아무것도를 다운로드하고 sudo는 떠들썩한 파티에서 실행 태권도 연맹
CharlyDelta

사실, 요즘 wget 명령은 | bash어디에서나 sudo없이 끝납니다 . nvm-sh / nvm : Node Version Manager
Elise van Looij

0

이것에 대한 가장 쉬운 해결책은 nvm.sh 실행 파일이 어디에 있든 그냥 누르는 것입니다.

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

이것은 나를 위해 잘 작동합니다 (설치 경로라고 가정).

전체 설치 절차는 다음과 같습니다.

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"

그런 다음 위의 명령을 실행하여 새로 설치된 nvm.sh를 칠 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.