[node.js] npm은 sudo없이 오류를 발생시킵니다.

방금 nodejs.org의 패키지를 통해 node와 npm을 설치했으며 npm으로 무언가를 검색하거나 설치할 때마다 명령을 sudo하지 않으면 다음 오류가 발생합니다. 이것이 권한 문제라고 생각합니까? 나는 이미 관리자입니다.

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0



답변

홈 디렉토리의 권한 문제처럼 보입니다. .npm 디렉토리의 소유권을 되 찾으려면 다음을 실행하십시오.

sudo chown -R $(whoami) ~/.npm


답변

당신의 쓰기 등의 작업을 수행 할 때 설치 노드가 요구 될 때 사용 권한은 사용 NPM 디렉토리 ( npm link, npm install -g, 등).

루트 권한으로 노드 설치를 실행했을 가능성이 있으므로 글로벌 패키지 설치가 루트 권한을 요구하는 이유입니다.


해결 방법 1 : NVM

권한으로 해킹하지 말고 올바른 방식으로 노드를 설치하십시오.

개발 시스템에서는 루트 권한으로 노드를 설치하고 실행하지 않아야합니다. 그렇지 않으면와 같은 항목 npm linknpm install -g동일한 권한이 필요합니다.

NVM (Node Version Manager)을 사용하면 루트 권한없이 노드를 설치할 수 있으며 여러 버전의 Node를 설치하여 쉽게 재생할 수 있습니다. 개발에 적합합니다.

  1. 노드 제거 (루트 권한이 필요할 수 있음). 도움 될 수 있습니다.
  2. 그런 다음 이 페이지의 지침 따라 NVM을 설치 하십시오 .
  3. NVM을 통한 노드 설치 : nvm install node

이제 npm link, npm install -g더 이상 루트로 당신을 필요로하지 않습니다.

편집 : https://docs.npmjs.com/getting-started/fixing-npm-permissions 참조


해결 방법 2 : 지정된 사용자를 위해 패키지를 전체적으로 설치

권한으로 해킹하지 말고 전 세계적으로 npm 패키지를 올바르게 설치하십시오.

당신은 OSX 또는 Linux에 있다면, 당신은 할 수 있습니다 글로벌 패키지의 사용자 전용 디렉토리를 생성 하고 설정 npm하고 node전 세계적으로 설치된 패키지를 찾는 방법을 알고.

sudo없이 전체적으로 npm 모듈을 설치하는 방법에 대한 단계별 지침은 이 훌륭한 기사 를 확인하십시오 .

npm 권한 수정 에 대한 npm의 설명서도 참조하십시오 .


답변

또한 node_modules디렉토리에 쓰기 권한이 필요합니다 .

sudo chown -R $USER /usr/local/lib/node_modules


답변

“시스템 전역”폴더에서 소유자를 변경하는 것은 해킹입니다. 새로 설치 하는 경우 “사용자 전역”프로그램에 대해 이미 쓰기 가능한 위치를 사용하도록 NPM을 구성 합니다.

npm config set prefix ~/npm

그런 다음 해당 폴더를 경로에 추가하십시오.

export PATH="$PATH:$HOME/npm/bin"

참조 @ErikAndreas대답NPM 모듈은 sudo를하지 않고 전 세계적으로 설치되지 않습니다
이상 단계별 가이드 에 의해 @sindresorhus 도 세트 $MANPATH.


답변

부트 스트랩 3에 대한 CSS를 컴파일하기 위해 Recess ( https://github.com/twitter/recess )를 설치할 때이 문제가 발생했습니다 .

홈을 설치할 때 :

-npm install recess -g
  1. Noah가
    말하는 home것처럼 디렉토리 에서 권한을 잠금 해제해야합니다 .

    sudo chown -R `whoami` ~/.npm
  2. Xilo가
    말하는 node_modules것처럼 디렉토리에 대한 쓰기 권한도 필요 하므로 여전히 작동하지 않으면 다음을 시도하십시오.

    sudo chown -R `whoami` /usr/local/lib/node_modules
  3. 여전히 오류가 표시되면 권한수정/usr/local 해야 할 수도 있습니다 .

    sudo chown -R `whoami` /usr/local

이 게시물에 표시된 것처럼 /usr/local/Mac을 사용하는 경우 실제로 시스템 디렉토리가 아니므로이 답변은 실제로 Mac 사용자에게는 완벽하게 “안전”합니다. 그러나 Linux 를 사용하는 경우 아래에서 다중 사용자 친화적 인 시스템 디렉터리 안전 (보다 복잡한) 솔루션에 대한 Christopher Will 의 답변을 참조하십시오 .


답변

조심해!!! 조심해!!! 조심해!!!

보안 위험 때문에 chown 또는 chmod는 해결책 이 아닙니다 .

대신 이것을하십시오 :

먼저 전화를 걸면 npm이 가리키는 곳을 확인하십시오.

npm config get prefix

/ usr이 반환되면 다음을 수행 할 수 있습니다.

mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin

이렇게하면 Home-Directory에 npm-Directory가 만들어 npm집니다.

이 변경 사항을 영구적으로 유지하려면 .bashrc에 export-command를 추가해야합니다.

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc


답변

다른 답변은 시스템 디렉토리의 소유권 또는 권한을 특정 사용자에게 변경하도록 제안합니다. 나는 그렇게하지 않는 것이 매우 불쾌합니다. 이것은 매우 어색하고 전체 시스템을 망칠 수 있습니다!

다음은 다중 사용자를 지원하는보다 일반적이고 안전한 방법입니다.

노드 사용자를위한 새 그룹을 작성하고이 그룹에 필요한 사용자를 추가하십시오. 그런 다음 노드 종속 파일 / 디렉토리의 소유권을이 그룹으로 설정하십시오.

# Create new group
sudo groupadd nodegrp

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

이제 사용자로서 쉽게 모듈을 설치할 수 있습니다

npm install -g generator-angular

일부 모듈 (grunt, bower, yo 등)은 여전히 ​​루트로 설치해야합니다. 이는 / user / bin /에서 심볼릭 링크를 생성하기 때문입니다.

편집하다

3 년 후 Node Version Manager 를 사용하는 것이 좋습니다 . 그것은 많은 시간과 문제를 안전하게 해줍니다.