루트(또는 sudo)에서 NVM을 사용할 수 없습니다.
애플리케이션에서 다른 버전의 노드를 사용하고 있음을 확인했습니다.JS에서 실행할 때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
. 나의 문제는 무엇입니까?
내 해결책은 다음 버전에서 심볼릭 링크를 생성하는 것입니다.node
그리고.npm
저는 지금./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
모든 사용자가 사용할 수 있습니다.
아래 명령 목록(출처: digital ocean)은 문제를 해결한 것 같습니다.
경고!!!!어떤 상황에서는 이러한 명령이 시스템을 손상시킬 수 있습니다!이 명령이 무엇을 하는지 확실히 알아두십시오!!!관련된
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에 있어야 함) 및 모든 사용자가 액세스할 수 있도록 권한을 설정합니다.
근본적인 이유는nvm
실제 프로그램이 아닙니다.사용자의 화면에 로드되는 bash 기능입니다..profile
,.bashrc
, 아니면... 그래서sudo
대부분의 다른 프로그램처럼 $PATH에서 자동으로 선택하지 않습니다.
대체 노드 버전 관리자는n
: https://github.com/tj/n .그건 진짜 프로그램이니까요.sudo
해킹 없이 $PATH를 통해 픽업합니다.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
를 사용할 때 경로에 없습니다.sudo
.
그래서타입
$ which nvm
결과는 다음과 같습니다.
/home/abc/mynvm/nvm
지금 다시 시도해 보십시오.sudo
:
sudo /home/abc/mynvm/nvm use v0.10.23
그러면 루트 사용자가 0.10.13 버전을 찾을 수 없다는 문제가 발생하지만 다음 오류 메시지가 표시됩니다.
README에 의하면.
nvm을 사용할 때는 필요 없습니다.
sudo
전 세계적으로 모듈을 설치합니다.npm -g
, 하는 대신에sudo npm install -g grunt
, 대신에 하다npm install -g grunt
선데이프 필요하신가요?
저 같은 경우에는.sudo npm run start
루트 액세스가 필요한 파일에 대한 액세스가 필요합니다.이 문제에 의하면,
당신은 사용하지 않습니다.
sudo
. 대신 파일을 chmod/chown해야 nvm을 가진 사용자가 파일에 액세스할 수 있습니다.
총합하여
nvm의 관리자는 우리가 할 필요가 없다고 강하게 믿고 있습니다.sudo
:P
나도 당신 문제가 있었습니다.마침내 나는 그것을 해결했습니다.해결책은 다음과 같습니다.
- nvm 및 nodejs를 제거합니다.다음은 유용한 링크입니다.nvm을(를) 제거합니다.apt-get을 사용하여 nodejs를 설치한 경우 명령을 사용하여 제거할 수 있습니다.
apt-get purge nodejs
. - 글로벌 nvm을 설치합니다.nvm 글로벌 페이지를 참조하십시오."표준 nvm은 다중 사용자 또는 루트 환경에서 작업하는 데 어려움을 알고 있었습니다."라고 되어 있습니다.
터미널을 다시 시작한 후 명령을 실행할 수 있습니다.sudo nvm ls
.
$ sudo bash -ic "nvm use stable; npm -v"
Now using node v6.3.1 (npm v3.10.3)
3.10.3
@SimpleJ 솔루션을 확장하여 실제 nvm bin dir에서 모든 바이너리를 연결하는 데 사용할 수 있는 유용한 bash 스크립트를 만들었습니다./usr/local/bin
:
#!/bin/bash
. ~/.nvm/nvm.sh
DIR=$NVM_DIR/versions/node/$(nvm version)/bin/*
DEST=/usr/local/bin
for filename in $DIR; do
filename=$(basename $filename)
DEST_FILE=$DEST/$filename
echo "Copying $filename to $DEST_FILE"
sudo ln -sf "$NVM_DIR/versions/node/$(nvm version)/bin/$filename" "$DEST_FILE"
done
나는 내가 가지고 있는 기계에도 똑같이 시도해 보았습니다.nvm
그리고 저는 조금 다른 답변을 드립니다.
$ sudo node --version
sudo: node: command not found
nvm 외부에 노드 0.11을 설치한 것으로 추정됩니다. (package manager 경유 또는 심지어 소스에서)
따라서 sudo를 통해 노드를 실행하면 대신 이 독립 실행형 노드가 선택됩니다.
그게 말이 되나요 아니면 제가 잘못 알고 있는 건가요?
이에 대한 가장 쉬운 해결책은 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 을 누를 수 있습니다.
NVM API의 최신 node-js를 추가 패키지 삭제 버전을 사용하지 않고 설치하고 싶었습니다.그래서 SUDONVM install-latest-npm을 찾고 있었습니다.Mb 이것은 당신에게 효과가 있을 것입니다 - 그것은 분명히 어떤 앱도 설치/제거하지 않고 저에게 효과가 있었습니다. (분명히 당신의 시스템에 적합한 것으로 당신의_USER_DIRECTORY를 변경하세요)
sudo /home/YOUR_USER_DIRECTORY/.nvm/nvm.sh | nvm install-latest-npm
설치했습니다.nvm
그리고.node
비우호적인 사용자로서.
이 sudo를 사용하기 위해서, 저는 이것을 수퍼유저의 것에 추가했습니다..bashrc
파일:
$ sudo bash -c 'echo $HOME/.bashrc'
/root/.bashrc
추가할내용/root/.bashrc
(바꾸기<your-user>
):
# Lazy load NVM/NPM/Node
lazynvm() {
unset -f nvm node npm
export NVM_DIR=/home/<your-user>/.nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
}
nvm() {
lazynvm
nvm $@
}
node() {
lazynvm
node $@
}
npm() {
lazynvm
npm $@
}
가장 간단한 접근법은 다음과 같은 것을 만드는 것입니다.PATH
당신의 것을 포함할 변수./bin
당신의 위치NVM_DIR
. 예는 다음과 같습니다.
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
PATH 변수에 NVM의 노드 이진법이 포함되도록 하려면 이 행을 추가합니다.
export PATH="$NVM_DIR/versions/node/$(nvm version)/bin:$PATH"
도움이 되길 바랍니다.
nvm을 글로벌하게 설치합니다.
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash
언급URL : https://stackoverflow.com/questions/21215059/cant-use-nvm-from-root-or-sudo
'source' 카테고리의 다른 글
요소의 XSLT 이름이 있습니까? (0) | 2023.11.07 |
---|---|
printk와 pr_info의 차이 (0) | 2023.11.07 |
문자열에 C#의 숫자만 포함되어 있는지 확인하는 가장 빠른 방법 (0) | 2023.11.02 |
숫자를 세 부분으로 나누고 그 총합을 원래의 숫자와 일치시키는 알고리즘이 있습니까? (0) | 2023.11.02 |
리눅스에서 syscall 기능을 다시 구현(또는 랩)하려면 어떻게 해야 합니까? (0) | 2023.11.02 |