npm 전역 경로 접두사


142

나는 npm과거 의 행동으로 혼란스러워서 평소보다 더 조심 스럽습니다 .

나는 Mac에 있고를 통해 node.js를 설치했습니다 brew install node.

이제 jslint.js명령으로 명령 행 에서 실행하고 싶습니다. jslint이 작업을 수행하는 정식 방법은 sudo npm install -g jslint이 출력에서 ​​성공적으로 실행 된 것입니다.

$ sudo npm install -g jslint
npm http GET https://registry.npmjs.org/jslint
npm http 200 https://registry.npmjs.org/jslint
npm http GET https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http 200 https://registry.npmjs.org/jslint/-/jslint-0.1.9.tgz
npm http GET https://registry.npmjs.org/nopt
npm http 200 https://registry.npmjs.org/nopt
npm http GET https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http 200 https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz
npm http GET https://registry.npmjs.org/abbrev
npm http 200 https://registry.npmjs.org/abbrev
npm http GET https://registry.npmjs.org/abbrev/-/abbrev-l.0.4.tgz
npm http 200 https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz
/usr/local/share/npm/bin/jslint -> /usr/local/share/npm/lib/node_modules/jslint/
bin/jslint.js
jslint@0.1.9 /usr/local/share/npm/lib/node_modules/jslint
└── nopt@1.0.10 (abbrev@1.0.4)

그후

$ jslint ply.js
zsh: command not found: jslint

때문에이하는 /usr/local/share/npm/bin내에있는 없습니다 $PATH.

1) brew전역 npm bin경로를 설치 하지 않은 이유는 무엇 입니까? 어쩌면 그럴 수도 있지만 무언가 zsh가 엉망입니다. 어디서 찾을 수 있을까요?
2) 내가해야합니까? ( 내 바닥에 내 :/usr/local/share/npm/bin보낸 부분 $PATH에 추가 ~/.zshrc)

나중에 다른 것을 설치하면 (Homebrew 또는 다른 것을 사용하여) 경로를 설정하기 위해 zsh 시작 스크립트에 추가해야하기 때문에 이것이 올바른 방법이 아닌 것 같습니다. 이 특별한 경우에는 npm install -g"적절한"위치에서 올바른 심볼릭 링크를 만들지 않는 것의 문제 일뿐 /usr/local/bin입니다.

내가 할 일은 /usr/local/bin문제가있는 모든 프로그램에 대한 심볼릭 링크를 수동으로 작성하는 것이며 내 목적에 충분해야한다고 생각합니다.

편집 : 나는이 오래된 질문이 대중적이지만 지금은 내 개인 워크 플로우와 노드 설치 및 다양한 종속성 관리에 대한 최선의 방법 측면에서 구식이기 때문에 2019 년에 이것을 업데이트하고 있습니다.

내 개인 워크 플로는 이제 nodejs.org에서 얻은 설치 프로그램을 사용하여 시스템에 노드를 설치합니다. 필자는 실제로 파일을 관리하는 방법을 가장 잘 알고 있기 때문에 homebrew 패키지 자체보다 이것을 신뢰합니다. Mac 또는 Windows에서 시스템 노드를 8.10에서 10.15로 변경하려면 OS 용 10.15의 nodejs.org에서 설치 프로그램을 다운로드하십시오. homebrew를 통해 설치된 노드를 업그레이드하려고 시도하는 것은 항상 내 경험상 더 어려운 접근법으로 입증되었습니다.

또한, 가장 큰 지적은 위의 jslint 예제의 npm 설치에 표시된 것처럼 sudo를 사용하지 않는 것이 좋습니다. 수퍼 유저를 사용하여 홈 브루 크 패키지를 설치하거나 상호 작용해서는 안된다는 것이 확실합니다. 필요하지 않아야하며 파일 권한 두통으로 이어질 것입니다!

또한 jslint보다 ESLint를 권장하며 몇 년 동안 jslint를 사용하지 않았습니다.


고마워, 그들은 지금 고쳐졌다. 나는 보통 그렇게 부주의하지는 않지만이 질문을 매우 빠르게 입력했습니다.
Steven Lu

@DaveNewton 저는 보통 그렇게합니다. 이 질문은 진짜 부주의 한 것이었지만 가장 인기있는 질문 중 하나입니다.
Steven Lu

스크린 샷보다 텍스트를 복사하는 것이 쉽지 않습니까? 어쨌든 고정.

1
@ saleemrashid1 ​​이봐, 나는 이것을하는 의미였다. 당신은 그것을 정말로 읽고 그것을 복사 했습니까? 감사.
Steven Lu

3
네! 천만에요. 나는 게임을하고 있는데 NPM이 물건을 다운로드하기를 기다리는 동안 나는 그것을했다!

답변:


308

당신의 확장 PATH:

export PATH=/usr/local/share/npm/bin:$PATH

끔찍한 생각이 아닙니다. 그렇게 말한 후에는 할 필요가 없습니다.

이것을 실행하십시오 :

npm config get prefix

OS X의 기본값은 /usr/local입니다. 즉, npm은 바이너리를로 연결합니다 /usr/local/bin.이 바이너리 는 이미 PATH(특히 Homebrew를 사용하는 경우) 에 있어야합니다 .

그래서:

  1. npm config set prefix /usr/local 다른 것이면
  2. sudonpm과 함께 사용하지 마십시오 ! jslint docs 에 따르면 , 당신은 그것을 할 수 있어야 npm install합니다.

npm을 sudo ( sudo brew install)로 설치 한 경우 일반 ol '로 다시 설치하십시오 brew install. Homebrew는 당신을 sudo자유롭게 해줄 것 입니다.


1
감사! 그러나 전 세계적으로 npm설치를 거부합니다 jslint. npm install -g jslint실패합니다. Error: EACCES, open '/Users/user/.npm/564fcf84-jslint.lock'
Steven Lu

2
chown /usr/local스크립트를 요구하지 않고 스크립트에 링크를 작성 해야 한다면 필요 하지 sudo않습니까? nom / node를 설정 하기 위해 이것을 따르는 ~/.local것은 어떻습니까?
Steven Lu

2
단! 나는 root~/디렉토리 에 사용자 가 입금 한 다양한 dirs ( sudo rm -ron tmp/and a .npm/)와 그 이후에 npm install -g jslint아름답게 일했습니다. npm 자체가 노드 프로그램이며 약간의 JS 명령 줄 개념 증명이라는 것이 깔끔합니다.
Steven Lu

2
@StevenLu Yep, chown-ing /usr/local및 그 안에있는 모든 것은 OS X의 표준 실습 입니다. Homebrew 위키 의 문제 해결 페이지를 참조하십시오 .
Trevor Burnham 2013

네 그것은 모양 chown의 ING /usr/local이미 그렇지 않으면 내 컴퓨터에서 발생 npm등을 실행하지 않고 sudo로 링크를 입금 할 수 없을 것 /usr/local/bin/
스티븐 루

8

이 문제에 시간을 보냈는데 PATH 스위치가 도움이되지 않았습니다. 내 문제는 브루 / 노드 / 고궁 박물원 버그가 여기 있었다 - https://github.com/npm/npm/issues/3794

Homebrew를 사용하여 이미 노드를 설치 한 경우 **** 안전하지 않을 수도 있다는 설명에 따라 참고하십시오. 그것은 나를 위해 일했지만 의도하지 않은 결과를 초래할 수 있습니다. 또한 최신 버전의 Homebrew가 npm을 올바르게 설치하는 것으로 보입니다. 그래서 아마 내가 시도 할 것이다 brew update, brew doctor, brew upgrade node**** 시도하기 전에 등 :

npm update -gf

또는 Homebrew로 노드를 설치하고 npm이 작동하려면 다음을 사용하십시오.

brew install node --without-npm
curl -L https://npmjs.org/install.sh | sh

3
사람들이 전 세계적으로 업데이트를 강요하도록 권장하는 것은 좋은 생각이 아닙니다.
toxaq

1
인터넷에서 누군가의 조언을 맹목적으로 따르는 것은 좋은 생각이 아닙니다.
Volte

-gf의 강제 방법으로 나를 위해 만들었습니다. 감사합니다.
MEM

5

brew를 사용하고 접두사가 이미 다음과 같이 설정되었습니다.

$ npm config get prefix
/Users/[user]/.node

bin 및 lib 폴더가 root가 소유하고 있음을 알았으므로 일반적인 비 sudo 설치를 막았으므로 사용자에게 다시 소유했습니다.

$ cd /Users/[user]/.node
$ chown -R [user]:[group] lib
$ chown -R [user]:[group] bin

그런 다음 / Users / [user]에있는 .bash_profile에 경로를 추가했습니다.

PATH=$PATH:~/.node/bin

3

brew는 -g와 함께 npm을 실행할 때에도 sudo를 사용할 필요가 없습니다. 실제로 실제로 더 많은 문제가 발생할 수 있습니다.

일반적으로 brew 또는 port를 사용하면 경로를 업데이트하여 .zshrc, .bashrc, .cshrc 또는 사용하는 쉘의 종류를 망칠 위험이 없습니다.


실제로 양조는의 사용을 요구하지 않으며 권장하지 않습니다 sudo. 나는 sudo를 사용하고 있었다 npm(내가 읽은 것이 나에게 말했기 때문에). 경로가 어떻게 설정되어 있는지 어디에서 찾을 지 궁금합니다. 실제로 zsh설치 프로그램은 내가 좋아하지 않는 경로를 (설치시 zsh) 하드 코딩하는 것을 실행 하는 것처럼 보입니다..zshrc
Steven Lu

설치 한 모든 항목은에 설치 npm 해야 합니다 /usr/local. /usr경로 네임 스페이스는 배포판의 공식 패키지 예약되어 있습니다. /usr/local/bin귀하의 $ PATH에 zsh 문제가 있습니다.
Floby

BREW 스크립트는 시작 스크립트에 아무 것도 추가하지 않습니다. 이것은 여러분이해야 할 일입니다. 예제는 madebyhoundstooth.com/blog/install-node-with-homebrew-on-os-x 를 참조하십시오 .
Pascal Belloncle

2

다음을 수행하여 Vue Cli no 명령 오류를 수정했습니다.

  • 터미널 sudo nano ~/.bash_profile에서 bash 프로파일을 편집하십시오.
  • 더하다 export PATH=$PATH:/Users/[your username]/.npm-packages/bin
  • 파일 저장 및 터미널 재시작
  • 지금 당신은 사용할 수 있어야합니다 vue create my-projectvue --version

https://cli.vuejs.org/ 에서 최신 Vue Cli를 설치 한 후이 작업을 수행했습니다.

나는 일반적으로 원사를 사용하지만 전 세계적으로 npm으로 이것을 설치했습니다 npm install -g @vue/cli. 원한다면 원사도 사용할 수 있습니다yarn global add @vue/cli

참고 : 이미 설치 한 경우 먼저 전역으로 제거해야 할 수 있습니다. npm uninstall -g vue-cli

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


1
이것은 기본적으로 나를 위해 일했습니다. PATH = $ PATH : / Users / [사용자 이름] /node_modules/.bin을 내보내도록 조정해야했습니다
Mike Carpenter


0

달리기를 시도하십시오.

PATH=$PATH:~/npm/bin

그런 다음 express명령 행에서 실행하여 테스트를 수행 하십시오. 이것은 나를 위해 일했습니다.


당신이 그런 것을 의미한다고 확신하십시오 ~/.npm/bin. npm홈 디렉토리에 디렉토리가 추가 되어서는 안됩니다 .
Steven Lu

0

sudo 명령을 사용하여 노드 패키지를 링크 한 경우

그런 다음 node_modules가 전역 적으로 설치된 폴더로 이동하십시오.

Unix 시스템에서는 일반적으로 전역으로 설치할 때 / usr / local / lib / node 또는 / usr / local / lib / node_modules에 배치됩니다. NODE_PATH 환경 변수를이 경로로 설정하면 노드에서 모듈을 찾을 수 있습니다.

Windows XP-% USERPROFILE % \ Application Data \ npm \ node_modules Windows 7-% AppData % \ npm \ node_modules

그런 다음 명령을 실행하십시오.

ls -l

모든 전역 node_module 목록이 표시되며 연결된 노드 모듈을 쉽게 볼 수 있습니다.


0

sudo brew는 더 이상 옵션이 아니기 때문에이 시점에서 brew로 설치하면 두 가지 정말로 독창적 인 것들을 얻을 수 있습니다. A : /usr/local/opts/ usr / local / shared에 설치 하거나 좋아합니다 . 이것은 처음에는 별 문제가 아니지만 특히 lint를 설치할 때 노드 PATH에 문제가 있습니다. B : 이런 식으로 제거하고 설치하거나 Bitnami 에서 스택을 얻을 때까지 sudo 명령이 붙어 있습니다.

여러 프로젝트가있는 경우 준비가되었으므로 스택 옵션보다이 방법을 권장합니다. 미리 만들어진 MEAN 스택을 사용하는 경우 httpd.conf에서 가상 호스트를 설정하고 (XAMPP보다이 스택에서 더 많은 고통을 겪음) 추가 할 때마다 추가 /vhosts.conf 및 / etc / hosts를 업데이트해야합니다. 데이터를 업 데이트 할 때 서버를 다시 가리키고 다시 시작하지 않는 한 프로젝트.


0

간단한 해결책은 ...

아래 명령을 넣으십시오.

  1. sudo npm config get prefix

    이와 같은 것이 아닌 경우 /usr/local아래 명령을 사용하여 수정해야합니다.

  2. sudo npm config set prefix /usr/local...

이제 100 % 잘 작동합니다


npm으로 sudo를 피하는 것이 좋습니다. 내 편집을 참조하십시오.
Steven Lu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.