npm은 sudo없이 오류를 발생시킵니다.


1286

방금 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

35
NVM 사용 하는 솔루션 을 고려 하십시오 : stackoverflow.com/a/24404451/1480391 (권한을 가진 해킹 대신)
Yves M.

2
@janaspage NPM (노드 패키지 관리자)을 통해 노드 또는 NVM (노드 버전 관리자)을 설치할 수 없습니다 . NPM은 노드 내에 있습니다 (동시에 설치됨). Wikipedia 페이지를보십시오 : en.wikipedia.org/wiki/Npm_(software)
Yves M.

5
보다 나은 마지막 해결책 sudo chown: github.com/sindresorhus/guides/blob/master/...
드미트리 Zaitsev

OSX 및 0official pkg intaller와 함께 노드를 설치하면이 솔루션이 작동하지 않았습니다. 나는 이것을 대신 사용했다 : stackoverflow.com/a/34968008/675565
fmquaglia

2
문제 및 수정 사항에 대해 설명합니다. docs.npmjs.com/getting-started/fixing-npm-permissions
n00b

답변:


2268

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

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

102
나는 그것이 whoami자리 표시 자라고 생각 했지만 문자 그대로 그대로 작동하므로 이해할 수없는 변수 여야합니다.
SimplGy

127
whoami는 실제 쉘 명령 en.wikipedia.org/wiki/Whoami 입니다. 주변의 역점은 whoami올바르게 실행 된 다음 chown 명령에 배치됩니다.
Noah

13
수동으로 사용자 이름을 지정할 수도 있습니다. 사용자 이름이 "simpleascouldbe"인 경우 명령은 다음과 같습니다.sudo chown -R simpleascouldbe ~/.npm
Noah

13
NPM은 필요하지 않습니다 없으며 sudo를를 사용해야합니다 - 특히 @HeberLZ 아래에 답을 볼 수에 대한 자신의 두번째 옵션한다 : ./configure --prefix = XXXXXX
스콧 Stensland

9
@ChristopherWill : 시스템 디렉토리의 소유권을 변경하지 않습니다. 이것은 사용자의 홈 디렉토리에있는 디렉토리의 소유권을 변경하는 것으로 사용자 가 소유 해야 합니다.
user4815162342

619

당신의 쓰기 등의 작업을 수행 할 때 설치 노드가 요구 될 때 사용 권한은 사용 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의 설명서도 참조하십시오 .


32
여기에 NVM 솔루션을 게시 한 모든 솔루션 중 최고의 결과를 제공했습니다. 권한을 가지고 놀기보다는 NVM을 사용하는 것이 좋습니다.
wenincode

9
이 지침은 잘 작동했습니다. 그러나 nodejs를 제거하기 전에 sudo로 설치 한 모듈제거하고 싶을 것입니다 . npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm-nodejs와 루트 셸을 다시 설치하고 제거해야합니다.
Bruno Flávio

4
이것이 최선의 해결책입니다. 먼저 sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g stackoverflow.com/a/22290968/1449157을 수행하는 모든 모듈 을 제거한 다음 npm이를 통해 제거 하고 설치했습니다nvm
Fabio Antunes

3
노드에 대한 제거 지침을 보려면이 SO 답변 stackoverflow.com/a/11178106/480031
seangates

3
루트를 사용하여 프로덕션 시스템에 노드를 설치하는 것이 왜 좋은가요?
Bruno Peres

401

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

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

7
뿐만 아니라 ~/tmp나를위한 디렉토리.
knownasilya

122
왜 이것이 여전히 공세를 당하는지 모르겠습니다. 시스템 디렉토리의 소유권을 특정 사용자로 변경하는 것은 매우 나쁜 습관입니다! 다른 솔루션에 대해서는 아래의 답변을 참조하십시오 (노드 사용자를위한 별도 그룹 생성).
Christopher Will 님이

1
나는이 없습니다 node_modules에서 /usr/local/lib/. wtf?
코너 거머리

27
무엇을 하든지 --usus / local / lib 또는 / usr / lib /에서 'sudo chmod -R whoami'를 실행하지 마십시오. sudoers 파일을 망쳐 서 미워하게됩니다.
qodeninja

7
여러분, 이걸 내려주십시오 ...- Then I ran sudo chown -R $USER /* and everything was fine아니오-당신은 당신의 기계를 망치고 있습니다.
commonpike

75

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

npm config set prefix ~/npm

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

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

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


접두사를 방금 설정하면 $HOME일반적으로 다음 번에 소스를 찾을 때 (예 : 다음에 로그인 할 때) .profile스크립트를 처리 한다는 점을 제외하고는 매우 동의합니다 $PATH.
Jess Austin

@JessAustin : 아마도 더 많은 혼란을 가져오고 $HOME다른 (미래?) NPM 파일 / 하위 폴더를 방해 할 수 있습니다. 다른 패키지 관리자 / 언어 / 빌드 시스템의 바이너리를 별도로 유지하고 $PATH대신 로그인 시간 스크립트로 명시 적으로 설정 하는 것이 좋습니다.
Joel Purra

어지러워? 우리는에 전역에 설치된 모듈에 대해 이야기 ~/lib/node_modules하고 있으며 관련 CLI가있는 경우에 ~/bin있습니다. 그들은 뿌리가 모두없는 경우 특히 많은 사용자의 경우 ~/bin~/lib이미 존재합니다.
Jess Austin

@JessAustin : 라이브러리와 바이너리에 대한 이름 충돌 문제이기도합니다. NPM이 바이너리를 넣은 ~/bin다음 하나 또는 두 개의 추가 패키지 관리자에 대해 동일한 작업을 수행 한다고 가정 해 봅시다 . 오늘이나 내일 일어날 수는 없지만 서로 다른 관리자의 두 패키지가 이름 충돌을 가지고 서로의 파일을 덮어 쓸 위험이 있습니다. 그것은 별도의 접두사를 갖기에 충분합니다. (구체적인 예를 감상 할 수있다.)
조엘 Purra

1
이것이 최선의 대답으로 받아 들여 져야합니다. 시스템 전역 폴더를 변경하면 위험 할 수 있습니다.
블라디미르 마튼

58

부트 스트랩 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 의 답변을 참조하십시오 .


35
이것은 나쁜 생각입니다. 특정 사용자가 시스템 디렉토리를 소유하지 않기를 원할 것입니다. 심각한 보안 문제 외에도 다중 사용자 호환 기능도 아닙니다.
Christopher Will

2
예. 개발 환경 +2에 적합한 솔루션입니다. 특히 node.js를 이미 설치했고 계속 흔들어야하는 경우에 특히 좋습니다!
elliotrock

홈 디렉토리 외부에서 패키지를 소유해서는 안됩니다
Ben

1
홈 폴더에 없으면 반대 주장에도 불구하고 시스템 디렉토리입니다. OS X에서 사용하지 않는다고해서 시스템 디렉토리가 아니라는 의미는 아닙니다.
rich remer

53

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

보안 위험 때문에 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

/ usr이있는 경우 옵션 2로만 전환해야합니까?
Albert Laure

3
마지막 명령은 실제로 $PATH문자열 자체가 아니라의 내용을 출력합니다 . 변경해야합니다.
Veluria

1
이것은 그것을 고쳤다! 감사합니다. '권한이 거부되었습니다.'/ usr / bin / <pkg> '연결 해제
valbaca

1
이것이 가장 좋은 대답입니다. 문제를 해결하기 위해 권장되는 방법입니다.
Paulo Coghi-복원 모니카

보안을 위협하는 이유는 무엇입니까?
Frank

40

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

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

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

# 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 를 사용하는 것이 좋습니다 . 그것은 많은 시간과 문제를 안전하게 해줍니다.


2
소스로 노드를 설치하면 다중 사용자가 문제가 되더라도 sudo를 사용하지 않고 모든 모듈이 완벽하게 작동합니다. yeoman 모듈의 경우 사람들은 sudo 실행을 허용하지 않으므로 yeoman 애플리케이션을 sudoing하여 생성기를 업데이트 할 수 없기 때문에 이것은 매우 중요합니다. (
HeberLZ

1
Linux에서는 일반적으로 내장 staff그룹을 사용하여 dev 폴더에 권한을 부여합니다. 또한 chmod g+ws node_modules그룹에 읽기 / 쓰기 권한이 있는지 확인 하는 것이 좋습니다 .
jackvsworld

@jackvsworld 직원 그룹을 몰랐습니다. 새 가상 그룹을 만들지 않아도되므로이 방법이 더 부드러운 솔루션 일 것 같습니다. 그러나이 입력에 감사드립니다.
크리스토퍼 윌

일반적으로 /usr/lib시스템 패키지 관리자가 제어 하고 있으므로 변경하지 않아야합니다.
리치 레머

23

공식 문서를 해결하는 방법에 npm install과 권한 EACCES오류가에 위치 https://docs.npmjs.com/getting-started/fixing-npm-permissions .

.pkgOSX 에서 설치 프로그램을 사용하여 노드를 새로 설치 한 후이 문제점이 발생했습니다 . 여기에는 훌륭한 답변이 있지만 npmjs.com에 대한 링크는 아직 보지 못했습니다.

옵션 1 : 권한을 npm의 기본 디렉토리로 변경

  1. npm 디렉토리의 경로를 찾으십시오.

    npm config get prefix

많은 시스템에서 이것은 / usr / local 입니다.

경고 : 표시된 경로가 / usr 인 경우 옵션 2로 전환하십시오 .

  1. npm의 디렉토리 소유자를 현재 사용자 이름 (사용자 이름!)으로 변경하십시오.

    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

    이는 npm 및 기타 도구 ( lib / node_modules , binshare )에서 사용하는 하위 폴더의 권한을 변경합니다 .

옵션 2 : npm의 기본 디렉토리를 다른 디렉토리로 변경

npm에서 사용하는 기본 디렉토리 (예 : / usr )의 소유권을 변경하지 않으려는 경우가 있습니다. 예를 들어 다른 사용자와 시스템을 공유하는 경우 문제가 발생할 수 있습니다.

대신, 다른 디렉토리를 모두 사용하도록 npm을 구성 할 수 있습니다. 우리의 경우이 폴더는 홈 폴더에 숨겨진 디렉토리가됩니다.

  1. 글로벌 설치 디렉토리를 작성하십시오.

    mkdir ~/.npm-global
  2. 새 디렉토리 경로를 사용하도록 npm을 구성하십시오.

    npm config set prefix '~/.npm-global'
  3. ~ / .profile 파일을 열거 나 작성하고 다음 행을 추가하십시오.

    export PATH=~/.npm-global/bin:$PATH
  4. 명령 행으로 돌아가서 시스템 변수를 업데이트하십시오.

    source ~/.profile

1
고마워, 이것은 chown soludion 이하 지 않았기 때문에 나를 위해 일했다. 넌 나를 구했다.
fmquaglia

/ usr이있는 경우 옵션 2로만 전환해야합니까?
Albert Laure

이 답변의 옵션 2를 좋아합니다. (1) sudo를 사용하는 보안 취약점이 없으며, (2) 다른 사용자의 아키텍처를 보존합니다. 항목이 포함되어 있습니다. 추가해 주셔서 감사합니다!
톰 로즈

심볼릭 링크 된 것을 설치하면 어떻게됩니까 /usr/bin/? 이제 사용자 만 액세스 할 수 있습니다. 파일이 실제로 다른 사용자의 홈 디렉토리에 있기 때문에 액세스 권한이없는 다른 사람으로 로그인합니다!
Frans

좋아, 이건 나를 위해 일했다. 명령 외에도 설명에 감사드립니다.
FrankByte.com

12

마치 여기에 더 많은 답변이 필요한 것처럼 ..

Sindre Sorus는 OS X 및 Linux에서 sudo없이 전 세계적으로 npm 패키지 설치 안내서를 제공 합니다 .

주어진 사용자를 위해 패키지를 전체적으로 설치하는 방법은 다음과 같습니다.

  1. 글로벌 패키지를위한 디렉토리 만들기

    mkdir "${HOME}/.npm-packages"
  2. .bashrc / .zshrc에서 나중에 사용하려면이 디렉토리를 참조하십시오.

    NPM_PACKAGES="${HOME}/.npm-packages"
  3. 전 세계적으로 설치된 패키지를 저장할 위치를 npm에 표시하십시오. 당신에 $HOME/.npmrc파일 추가 :

    prefix=${HOME}/.npm-packages
  4. 노드가 찾을 수 있는지 확인하십시오. .bashrc / .zshrc에 다음을 추가하십시오.

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
  5. 설치된 바이너리 및 매뉴얼 페이지가 있는지 확인하십시오. .bashrc/에 다음을 추가하십시오 .zshrc:

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

위 단계를 자동으로 수행하려면 npm-g_nosudo 를 확인 하십시오.

최신 안내서는이 안내서소스를 확인하십시오.


2
편집 @AndyHayden에 대한 tx :) 내가 선호하는 방법은 위의 주석에서 제안됩니다 : NVM을 사용하십시오! stackoverflow.com/a/24404451/1480391
ptim

권한에 관한 문제를 다루지 않는 유일한 솔루션입니다. 나는 NPM과 그 바보 같은 권한 바보가 싫어. 솔루션 주셔서 감사합니다!
RyanNerd

8

TL; DR

항상 sudo -i또는 전역 패키지를 설치하기 위해 sudo -H실행할 때 사용 npm install하십시오.

-

사용 npm하면 패키지를 사용자 홈 디렉토리에 다운로드합니다. sudo로 실행할 때 npm파일을 동일한 디렉토리에 설치하지만 이제는 루트가 소유합니다.

이것이 바로 지금까지 사용했던 모든 사람에게 발생하는 일입니다 npm.

  • 사용하여 문제없이 일부 로컬 패키지 설치 npm install foo
  • sudo install -g foo-cli문제없이 사용하여 글로벌 패키지 설치
  • 로 로컬 패키지 설치 시도 npm install bar
  • 디렉토리를 다시 npm가져와야 chmod하므로 이제 디자이너에게 좌절 하십시오.

sudo와 함께 -i또는 -H옵션 을 사용하면 홈 디렉토리가 root의 홈 디렉토리가됩니다. 모든 글로벌 설치는에서 소유 한 파일 /root/.npm대신 패키지를 캐시합니다 .root/home/me/.npm

항상 글로벌 패키지를 설치하기 위해 sudo -i또는 sudo -H실행할 때 사용 하면 권한 문제가 사라집니다.npm installnpm

잘 했어

http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html

- QV 이미 성교 고정 허용 대답 npm.


가장 간단한 수정
맨짓 싱

6

NPM 모듈 에서 비슷한 문제가 sudo없이 전 세계적으로 설치되지 않습니다 . 문제는 노드를 설치할 때 chris / lea ppa repo 통해 sudo로 노드를 설치 했다는 것입니다 .

내 솔루션은 노드를 제거한 다음 다음과 같이 설치하는 것입니다.

nodejs.org에서 최신 안정적인 노드 소스를 다운로드하십시오.

tar -zxf node-v0.10.20.tar.gz # 압축 해제 소스

cd node-v0.10.20 # 압축되지 않은 폴더 입력

sudo chown $ USER -R / usr / local

./configure --prefix = / usr / local && make && install 설치

PD : / usr / local 폴더의 소유권을 변경하지 않으려는 경우 이미 소유 한 위치에 설치할 수 있습니다. 이 방법의 문제점은 나중에 bash 명령 행으로 설치 폴더를 바인드하여 나중에 node 명령을 사용할 수 있다는 것입니다.

mkdir ~ / opt

./configure --prefix = ~ / opt && make && make install

echo 'export PATH = ~ / opt / bin : $ {PATH}'>> 현재 운영 체제에 따라 ~ / .bashrc # 또는 ~ / .profile 또는 ~ / .bash_profile 또는 ~ / .zshenv

이러한 방법 중 하나를 사용하면 sudo를 사용하지 않고 다음을 수행 할 수 있습니다.

npm install -g module_to_install


1
나는이 방법을 사용하여 끝났다. sudo chown $USER /use/local건축하기 전에 사용했습니다 . 지금까지는 좋아 보인다. 원자를 만들려고한다! 감사!
prasanthv

6

npm install -g somepackage를 실행하면 루트 / 관리자로 명령을 다시 실행하라는 EACCES 오류가 발생할 수 있습니다. 권한 문제입니다.

그건 수정에 쉽게 터미널 열고 (응용 프로그램> 유틸리티> 터미널)

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

** 나중에 일부 문제가 발생할 수 있으므로 sudo (sudo npm -g install some)와 함께 패키지 관리를 사용하지 않는 것이 좋습니다. **

참조 : http://foohack.com/2010/08/intro-to-npm/


예이! 이것은 나에게 그것을했다! : 위의 다른 다른 사람을 수행 한 후 sudo chown -R `whoami` ~/.npm, sudo chown -R `whoami` /usr/local/lib
레지스 Zaleman을

8
이로 인해 많은 다른 앱에서 권한 문제가 발생할 수 있으므로이 작업을 수행 하지 않는 것이 좋습니다 . 왜 웜 캔을 다른 웜 캔으로 교환 할 수 있습니까?
Brad Parks

1
또는 최소한 / usr / local / lib / node_modules로 수정하십시오.
Ken

이것, 이것 그리고 더 많은 것. 벽에 머리를 대고 난 후에, 이것은 속임수를 썼다. +1
dashard

이것은 내 문제였다. 새 맥북 (OS x 10.10.3)에서 / usr / local / lib / node_modules에 대한 권한은 다음과 같습니다. $ ll / usr / local / lib / node_modules 총 0 drwxr-xr-x 3 24561 wheel 102B 3 월 31 일 18:19 . drwxrwxr-x 4 24561 관리자 136B 3 월 31 일 18:19 .. drwxr-xr-x 26 65534 직원 884B 4 월 13 일 10:53 npm
tkane2000

5

Mac의 경우 (Christoper Will의 답변에서 채택)

맥 OS X 10.9.4

  1. 시스템 환경 설정> 사용자 및 그룹> (잠금 해제)> + :

    새 계정> "그룹"
    계정 이름 : nodegrp

    그룹을 만든 후이 그룹에 포함 할 사용자를 선택하십시오.

  2. sudo chgrp -R nodegrp / usr / local / lib / node_modules /
    sudo chgrp nodegrp / usr / bin / node
    sudo chgrp nodegrp / usr / bin / npm
    sudo chown -R $ (whoami) : nodegrp ~ / .npm


1
나는 / usr / local / bin에 대한 경로를 변경해야했지만이 솔루션 이외의 다른 솔루션은 내 OX X 10.9 시스템에서 훌륭하게 작동했습니다. 감사합니다!
splig

시스템 디렉토리의 소유권을 변경하는 나쁜 습관.
rich remer

@richremer 나는 그것이 달성하려는 것에 달려 있다고 생각합니다. 폴더가 원래 sudoer 만 액세스 할 수있는 경우이 방법으로 만 폴더를 변경할 수 있습니다. npm과 관련된 폴더로 변경을 제한합니다. sudo일반 사용자가 수정할 수 있도록 폴더 그룹 소유권 을 유지 하거나 변경하는 것이 더 안전 합니까? 일반 사용자가이 폴더에서 작업을 수행하지 않으면 폴더의 그룹 소유권을 변경해서는 안됩니다.
ken

적절한 방법은 sudo를 사용하여 전역 패키지를 설치하는 것이지만 -H플래그를 사용하여 수행하십시오 . 구체적으로 sudo -H npm install -g <pkg>. 이를 통해 시스템 및 사용자 폴더에 대한 권한을 적절히 묘사 할 수 있습니다. sudo npm install -groot 소유의 파일을 사용자 디렉토리에 설치하기 때문에 원하지 않는 것은 use 입니다. npm이 올바른 방법으로 수행 할만 큼 똑똑하다면 좋을 것입니다. 그렇지 않으므로 -Hsudo 플래그를 사용하여 전역으로 올바르게 설치해야합니다.
rich remer

4

제 경우에는 ~ / tmp의 권한 때문입니다.

sudo chown -R $USER ~/tmp

그리고 괜찮습니다!


4

나를 위해 만 실행

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

작동하지 않습니다. 그런 다음 나도 실행

sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm

그리고 모든 것이 잘 작동합니다!


당신은 매우 멋진 선생님입니다 :)
user805981

파일 /usr/lib은 시스템 파일이며 개인 사용자 계정이 소유하지 않아야합니다.
리치 레머

4

문제 : 사용자 (사용자)에게 디렉토리에 대한 올바른 권한 세트가 없습니다.

즉각적인 방법은 sudo를 사용하여 npm 설치를 실행하는 것이지만 동일한 오류 또는 부적절한 설치가 발생할 수 있습니다.

그리고 디렉토리 소유권 변경은 좋은 옵션이 아니며 임시 패치입니다.


해결책 / 제안 : npm의 기본 디렉토리 변경 (공식 문서에서 )

계속 진행하기 전에 컴퓨터를 백업하십시오.

(선택 사항) 잘못 설치 한 경우 먼저 설치 제거하십시오.

npm uninstall <package-name>  # use sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  1. 글로벌 설치 디렉토리를 작성하십시오.

    mkdir ~/.npm-global

  2. 새 디렉토리 경로를 사용하도록 npm을 구성하십시오.

    npm config set prefix '~/.npm-global'

  3. ~/.profile또는 ~/.bash_profile파일을 열거 나 작성하고 다음 행을 추가하십시오.

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

  4. 명령 행으로 돌아가서 시스템 변수를 업데이트하거나 터미널을 다시 시작하십시오.

    source ~/.profile

  5. (선택 사항) 테스트 : sudo를 사용하지 않고 패키지를 전체적으로 다운로드하십시오.

    npm install -g jshint


3

경우에 sudo chown -R $(whoami) ~/.npm당신을 위해 일을하지 않았다, 또는 당신은 비 터미널 명령 솔루션이 필요합니다.

문제는 사용자 계정에 node_modules 폴더에 대한 쓰기 권한이 없으므로 다음을 수행 할 수 있다는 것입니다

  1. 파인더를 열고 cmd+ shift+를 누르면 gURL이있는 폴더로 이동합니다.

  2. 다음 경로를 작성하고 /usr/local/lib/node_modulesgo를 누릅니다.

  3. node_modules폴더를 마우스 오른쪽 버튼으로 클릭 하고Get Info

  4. sharing & permissions섹션으로 스크롤

  5. 변경하려면 잠금을 해제하십시오.

  6. 을 누르고 +사용자 계정을 추가하십시오

  7. Read & Write권한 드롭 다운 메뉴 에서 선택해야합니다

이제 패키지를 설치하지 않고 sudo권한 문제를 해결해야합니다.


3

문제 : npm이 전역 패키지 및 명령을 저장하는 데 사용하는 디렉토리에 쓸 수있는 권한이 없습니다.

해결 방법 : npm에 대한 권한을 허용하십시오.

터미널을 엽니 다 :

command + spacebar 다음 'terminal'을 입력하십시오.

이 명령을 입력하십시오 :

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  • 참고 : 비밀번호가 필요합니다.

이 솔루션을 사용하면 필요한 디렉토리 만 허용하고 다른 디렉토리는 훌륭하고 안전하게 유지할 수 있습니다.


시스템 폴더의 사용자 소유권을 설정하는 다운 다운은 안티 패턴이며이를 설명하지 않습니다. npm config get prefix홈 폴더에 무언가 를 반환 하는 특별한 경우이 솔루션은 권한을 수정하지만 공유 환경에 안전한 방식으로 전역 패키지를 설치하는 근본적인 문제를 해결하지는 않습니다.
rich remer

이것은 운영 체제의 많은 부분의 권한을 다시 작성합니다. 예를 들어 우분투에서 이것을 실행하면 "sudo"명령 자체를 사용할 수 없게됩니다.
Sahand Seifi

2

NPM을 올바르게 구성하기위한 또 다른 훌륭한 수정 사항은 다음 명령을 실행하십시오.

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH

2

당신은 이것을 시도 할 수 있습니다, 우분투와 맥에서 작동

sudo chown -R $(whoami) /usr/local/lib/node_modules

1
나는 이것을 실행하고 Mac에서 나를 위해 100 % 일했다 : sudo chown -R $ (whoami) / usr / local / lib / node_modules
leeroya

1

나에게 가장 좋은 옵션은 npm 문서 에서 제안한 것인데, 먼저 실행하여 전역 node_modules가 기본적으로 설치되는 위치를 확인하는 것 npm config get prefix입니다. 내가 Trusty에서 /usr하는 것처럼, 내가했던 방식을 망치지 않고 안전하게 소유 할 수있는 폴더로 변경하고 싶을 수 있습니다.

그렇게하려면 시스템에서 새 폴더를 선택하거나 만듭니다. /usr/localMac 사용자이기 때문에 홈 디렉토리에 또는 저와 같이 일관성을 유지 하고 싶을 수도 있습니다 (앞에있는 기계에 따라 다른 곳을 보지 않아도됩니다). 그렇게하는 또 다른 좋은 이유는 /usr/local폴더가 이미 PATH에 있다는 것입니다 (PATH로 엉망이되지 않는 한) 새로 만든 폴더가 없을 가능성이 있으며 폴더를 추가해야 할 수도 있습니다. .bash-profile 또는 .bashrc 파일 에서 스스로 경로를 지정하십시오 .

간단히 말해서,로 전역 모듈의 기본 위치를 변경하고 npm config set prefix '/usr/local'폴더를 생성하고 /usr/local/lib/node_modules(npm에서 사용함) 다음 명령으로 npm에서 사용하는 폴더에 대한 권한을 변경했습니다.

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

이제 전 세계적으로 모든 모듈을 안전하게 설치할 수 있습니다. 도움이 되었기를 바랍니다!


1

이것이 Windows 8.1의 문제를 해결하는 방법입니다.

  • nodejs 설치로 이동하십시오 (보통 C : \ Program Files \ nodejs)
  • node_modules 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동하십시오.
  • 보안 탭을 클릭하고 고급
  • 상단에 "소유자 : SYSTEM"이 표시됩니다. 변경을 클릭하십시오.
  • 권한이 필요한 사용자를 입력하고 확인을 클릭하십시오.
  • 고급 설정 맨 아래의 "모든 하위 개체 권한 항목을이 개체의 상속 가능한 권한 항목으로 교체"확인란을 선택하고 확인을 클릭하십시오.
  • 필요한 npm 설치 / 업데이트 수행

1

가장 좋은 방법은 것 NPM 문서에 의해 제공되는합니다.


우분투 제안 솔루션은 옵션 # 2입니다.

간단한 단계 :
글로벌 설치 디렉토리를 작성 하십시오 .
mkdir ~/.npm-global

새 디렉토리 경로를 사용하도록 npm을 구성하십시오. 접 두부가 업데이트되었는지 여부를 확인하는 데 도움이 될 수 있습니다. 결과는 <홈 디렉토리> /. npm-global입니다.
npm config set prefix '~/.npm-global'
npm config get prefix

~ / .profile 파일을 열거 나 작성하고 다음 행을 추가하십시오.
export PATH=~/.npm-global/bin:$PATH

명령 행으로 돌아가서 시스템 변수를 업데이트하십시오.
source ~/.profile

2-4 단계 대신 해당 ENV 변수를 사용할 수도 있습니다 (예 : ~ / .profile을 수정하지 않으려는 경우).

NPM_CONFIG_PREFIX=~/.npm-global


Mac의 경우 제안 된 솔루션은 옵션 # 3입니다.

Mac OS에서는 Homebrew 패키지 관리자를 사용하여이 문제를 방지 할 수 있습니다

brew install node


이 NPM_CONFIG_PREFIX가 작동하지 않습니다. 이것은 npm-descriptiton의 오류입니다. 올바른 방법으로 위의 내 게시물을 참조하십시오 : stackoverflow.com/a/41395398/1256697
suther

1

소유자를 루트에서 사용자 이름으로 변경하여 해결

sudo chown -R me:me /home/me/.config/configstore/

귀하의 사용자 이름과 그룹으로 나를 변경하십시오.


1

나는 소유자를 변경하는 대신 우분투 그룹을 사용하여 이것을 달성하고 싶습니다. 아주 간단합니다.

  1. apt-get을 사용하여 nodejs와 npm을 먼저 설치하십시오.

    sudo apt-get update && sudo apt-get install nodejs npm

  2. 사용자 이름 (예 : username)을 확인한 후 다음 명령을 실행하여 터미널에서 확인하십시오.

    whoami

  3. 매우 간단한 명령을 사용하여 할당 된 그룹 목록을 볼 수 있습니다. 일반적으로 첫 번째 그룹은 사용자 이름입니다.

    groups

  4. 로그인 한 사용자에게 액세스를 허용하려면 다음을 실행하십시오.

    sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local

  5. npm 및 nodejs 업데이트

    npm install -g npm

당신은 모두, 사용자는 sudo없이 npm 명령을 실행할 수 있습니다

이 링크를 참조 할 수도 있습니다 https://askubuntu.com/a/1115373/687804


0

맥 OS X에서 함께 설치하는 경우 브루의 brew install npm 설치 경로는 /usr/local/share/npm/모두 bin/lib/node_modules/ 하위 폴더.

현재 로그인 한 사용자로 소유자로 변경하기 위해이 명령을 실행하면 모든 문제를 해결해야하며을 사용하지 않고 전역 NPM 패키지를 설치할 수 있습니다 sudo.

sudo chown -R $USER ~/.npm /usr/local/share/npm/


1
현재 추천 이 질문에 대한 내 다른 대답을 사용하는 npm config대신.
Joel Purra

0

사실, 나는 또한 같은 문제가 있었다. 우분투를 실행 중이었습니다. 우분투의 공개 키를 잃어 버렸기 때문에 광산 문제가 발생합니다. 내 시스템 업데이트조차 일어나지 않았습니다. GPG 오류가 발생했습니다. 이 경우 다음 명령을 사용하여 키를 되 찾을 수 있습니다.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

그 후 npm은 잘 작동합니다!


0

John Papa는이 문제의 역사와 추론을 지적하고 확실한 해결책을 제시 합니다 .

John Papa의 단계는 다음과 같습니다.

  1. brew를 사용하여 npm없이 노드를 설치하십시오.
  2. .bash_profile / .bashrc를 업데이트하여 npm 및 노드가 패키지를 설치하고 찾을 위치를 알 수 있도록하십시오.
  3. brew를 사용하여 노드를 업데이트하고 npm을 사용하여 자체 업데이트

이것이 호기심을 돕기를 바랍니다!


0

이것이 내가 활용하고 일한 솔루션입니다. 나는 whoami결코 작동하지 않았다.

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

그때

sudo chown -R $USER /usr/local/bin/npm

그때

sudo chown -R $USER /usr/local/bin/node


0

@Yves M.의 답변은 내 솔루션과 매우 유사했습니다. 여기에 내가 사용한 명령이 약간 다릅니다.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

그런 다음 최신 버전을 쿼리하십시오.

nvm ls-remote

그런 다음 최신 버전을 설치하십시오.

nvm install YOUR_VERSION_HERE

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