2016-07-15 4 views
6

전 세계에서 npm 패키지를 설치할 때 일부 node.js 개발을 집에서 시작할 예정 이었지만 이상한 동작이 발생했습니다.npm은 전 세계적으로 설치된 패키지에 대해 기묘한 퍼미션을 설정합니다.

WebStorm을 IDE로 사용하고 ECMAScript6 기능을 사용하고 싶습니다. 즉, WebStorm이 Babel을 사용하여 소스를 변형해야합니다.

그래서 나는 세계적으로 바벨을 설치하려고 :

$ sudo npm install -g babel-cli 

은 무엇 발생하는 파일이 루트 사용자의 액세스 가능한 모든 좋은 것을, 그리고 babel-cli 디렉토리와 그 안에있는 모든 파일 및 디렉토리는만큼 잘 봐 나는 root로 보입니다. 내가 패키지에서 찾거나 사용하려고하면 문제는 다른 사용자로 온다 :

$ ls -l /usr/lib/node_modules/babel-cli/ 
ls: cannot access '/usr/lib/node_modules/babel-cli/lib': Permission denied 
ls: cannot access '/usr/lib/node_modules/babel-cli/index.js': Permission denied 
ls: cannot access '/usr/lib/node_modules/babel-cli/scripts': Permission denied 
ls: cannot access '/usr/lib/node_modules/babel-cli/node_modules': Permission denied 
ls: cannot access '/usr/lib/node_modules/babel-cli/package.json': Permission denied 
ls: cannot access '/usr/lib/node_modules/babel-cli/README.md': Permission denied 
ls: cannot access '/usr/lib/node_modules/babel-cli/bin': Permission denied 
total 0 
d????????? ? ? ? ?   ? bin/ 
d????????? ? ? ? ?   ? lib/ 
d????????? ? ? ? ?   ? node_modules/ 
d????????? ? ? ? ?   ? scripts/ 
-????????? ? ? ? ?   ? index.js 
-????????? ? ? ? ?   ? package.json 
-????????? ? ? ? ?   ? README.md 

내가 설치 한 패키지에 문제가되지 않습니다, 그들은 모두는 다음과 같이된다.

저는 우분투 16.04에서 node.js v6.3.0과 npm 3.10.3을 사용하고 있습니다.

새로 설치 한 node.js는 here입니다. npm을 업데이트하려고 시도하면 글로벌 npm 디렉토리에 동일한 문제가 발생하고 root을 제외하고 npm을 사용할 수 없게됩니다.

나는 사용자로 글로벌 node_modules 목록

은 내가 특별한 아무것도 볼 nobody에 의해 소유되는 디렉토리 외에
$ ll /usr/lib/node_modules/ 
total 8,0K 
drwxr--r-- 6 nobody root 4,0K jul 15 23:50 babel-cli/ 
drwxr-xr-x 10 root root 4,0K jul 15 23:21 npm/ 

를 참조하십시오.

패키지를 설치할 때 오류가 없습니다.

npm 및/또는 노드에 문제가 있습니까? 우분투에 문제가 있습니까? 또는 어떻게 노드를 설치 했습니까? 어떤 일이 일어날 지 모르는 것이 무엇인가 같은 이유가 무엇일까요?

로컬로 설치하면 정상적으로 작동하고 babel-cli 패키지 인 경우 로컬 개발 패키지로 설치하는 것이 허용 가능한 해결 방법입니다. 전 세계적으로 패키지를 설치할 때 어떤 일이 일어나는지, 왜 그런지 알고 싶습니다.


문제 answered here. 문제는 npmnode과 관련이 없습니다.

+0

및 나는이 문제를 보지 못했다. 그러나 이전 npm으로 노드 4.4를 실행 중입니다. 바벨 (babel)에 관한 문제 만 겪고 있습니까? 툴툴 거리거나, 꿀꺽 꿀꺽 마시는 것, 바우어 (bower)와 같은 다른 CLI 도구는 어떻습니까? – tsturzl

+0

@tsturzl 전 세계적으로 설치 한 모든 패키지에서 동일합니다. –

+0

절대'sudo'와'npm'을 절대로 사용하지 마십시오. 너는 단지 문제를 요구하고있다. 노드를 날려 보내고 모든 npm 모듈과 디렉토리를 열고 일반 사용자 권한으로 모든 것을 설치하십시오. – xdumaine

답변

5

당신은 세계적으로 패키지를 설치 단지 같은 sudo없이 명령을 사용합니다 :

$ npm install -g <package> 

당신이 EACCES 또는 권한 오류를 받고있는 경우, sudo의 사용은 피해야하지만, 대신 수정해야 귀하의 허가는 npm이 sudo 없이도 실행될 수 있도록합니다.

npm이 전역 패키지를 저장하는 데 사용하는 폴더에 쓸 수있는 권한이 없으면 이러한 오류가 발생합니다. 대부분의 시스템에서

$ npm config get prefix 

, 그것은 /usr/local 수 있습니다 그리고 당신은이 폴더에 대한 사용 권한을 수정 할 수 있습니다 :이 문제를 해결하려면, 당신은 NPM의 기본 디렉토리 경로 무엇을 찾아 시작할 수 있습니다.폴더가 /usr 또는 /usr/lib 인 경우이 디렉토리에 대한 사용 권한을 변경해서는 안되며, 그 이유는 기본 디렉토리의 사용 권한을 변경하지 않으려는 경우 npm이 다른 디렉토리를 사용하도록 구성 할 수 있기 때문입니다 . 기본 폴더에 대한 사용 권한을 변경할 수 있으며, 경우

, 당신은 사용할 수 있습니다

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

그것은 현재 사용자의 이름으로 NPM의 디렉토리의 소유자를 변경할 수 있습니다.

당신이 NPM의 기본 디렉토리를 변경하려는 경우, 당신은이 새로운 폴더를 생성하여 시작할 수 있습니다

$ npm config set prefix '~/.npm-packages' 

당신에게 그런 다음

$ mkdir ~/.npm-packages 

을, 당신은 NPM이 새 폴더를 사용하도록 구성 이 새로운 폴더를 PATH에 추가해야합니다 (예 : ~/.profile 사용).

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

이 시점에서 source ~/.profile으로 시스템 변수를 업데이트하고 sudo을 사용하지 않고 패키지를 전체적으로 설치하도록 테스트 할 수 있습니다.

npm에서 ~/.npm-packages 폴더를 사용하므로 권한 오류없이 패키지를 설치할 수 있습니다.

이 문제에 대한 자세한 내용은 npm documentation에서 확인할 수 있습니다.

+0

'/ usr'에서 시스템 디렉토리의 비 특권 사용자 소유권을 부여하는 것은 항상 나쁜 생각인데,이 대답이 권장하는 것처럼 보였습니다. 모듈을 전역 적으로 (즉, 다른 사용자가 사용할 수 있도록) 시스템에 설치하려면 'root'사용자 또는 sudo를 통해 모듈을 설치해야합니다. 다른 일을하는 것은 무책임한 일입니다. 자신의 컴퓨터에서 문제는 있지만 개발자에게 이것이 올바른 방법이라고 가르친 다음 서버에서 수행하는 것은 재앙입니다. – Guss

+0

사용 권한 수정은 npm의 기본값이 직접'/ usr/local'이고 다른 디렉토리에있는 경우 사용 권한을 수정해서는 안된다는 해답을 명확히 제시 할 때만 사용 권한 수정이 제안됩니다. 다른면에서,'/ usr/local'에 대한 권한을 수정하는 것이 여전히 나쁜 생각이라고 생각한다면 어쩌면 당신은 [즉시 npm에 문제를 열어야합니다] (https://github.com/npm/npm/issues) 이것은 공식적이고 문서화 된 권한 수정 방법이므로 https://docs.npmjs.com/getting-started/fixing-npm-permissions – HiDeo

+0

에 익숙합니다. 그 바보스런 문서에 익숙하며 이미 버그에 관한 내용이 있습니다. 그 : https://github.com/npm/docs/issues/745. NPM 문서의 소유자 (적어도)는 동의하는 것 같습니다. 그녀가 약속 한대로 곧 고칠 예정입니다. – Guss

0

사용자를 변경하는 경우 다음 중 하나를 수행해야합니다. 그 당시 npm을 설치했을 때 루트 사용자로 설치되었지만 사용자가 변경된 후에 사용자가 변경했음을 나타 내기 때문에 권한 오류가 발생합니다 npm이 전역 패키지 및 명령을 저장하는 데 사용하는 디렉토리에 쓸 수있는 권한이 없습니다. 다음을 통해이를 수정할 수 있습니다. -

이 문제를 해결하는 패키지 관리자를 사용하십시오.

Mac OS에서 노드를 새로 설치하는 경우 Homebrew 패키지 관리자를 사용하여이 문제를 완전히 피할 수 있습니다. Homebrew는 올바른 사용 권한을 사용하여 작업을 시작합니다. 다른 디렉토리에

brew install node 

또는

변경 NPM의 기본 디렉토리

당신이 사용을 NPM 기본 디렉토리의 소유권을 변경하지 않는 시간이있다 (예를 들어/usr) 예를 들어 다른 사용자와 시스템을 공유하는 경우와 같이 몇 가지 문제가 발생할 수 있습니다.

대신 npm이 다른 디렉토리를 모두 사용하도록 구성 할 수 있습니다. 여기서는 홈 폴더의 숨겨진 디렉토리입니다.

글로벌 설치를위한 디렉토리 확인 : 새 디렉토리 경로를 사용하는

mkdir ~/.npm-global 

구성 NPM을 :

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

열기 또는 ~/.profile 파일을 작성하고이 줄을 추가 :

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

위로 명령 줄에서 시스템 변수를 업데이트하십시오.

source ~/.profile 

테스트 : sudo를 사용하지 않고 패키지를 전체적으로 다운로드하십시오. 대신에 (당신이 ~/.profile에 수정하지 않으려는 경우 예) 당신은 또한 해당 ENV 변수를 사용할 수있는 단계 2-4의

npm install -g babel-cli 

: 나는 노드 소스 저장소를 사용

NPM_CONFIG_PREFIX=~/.npm-global 
관련 문제