배포 nodejs 패키지 (Ubuntu)를 사용하여 홈 디렉터리에 NPM 설치


94

배포 Node.js 패키지 (또는 최신 릴리스의 경우 chris-lea ppa )를 사용하고 싶지만 내 홈 디렉토리에 NPM을 설치합니다.

이것은 까다로워 보일 수 있지만 다중 언어 / github를 사용하는 개발자가 Linux에서 언어 런타임 / 라이브러리 환경을 설정하는 매우 관용적 인 방법입니다. 런타임 용 배포 패키지, 사용자 별 환경의 타사 라이브러리 (virtualenv, RVM-RVM 참조) 원한다면 Ruby도 빌드 할 것입니다). 필요한 경우 로컬에서 노드를 구축 할 것이지만 노드가 많은 프로젝트에서 부수적 인 개발 요구 사항이되고 있으므로 PITA입니다.


답변:


203

NPM은 이미 프로젝트에 로컬 패키지를 설치하지만 여전히 운영 체제 파일에서 시스템을 멀리하고 싶습니다. Nodejs 패키지를 구획화하는 방법은 다음과 같습니다.

chris-lea PPA를 통해 Nodejs 및 NPM을 설치합니다. 그런 다음 노드 "글로벌"패키지를 보유하기 위해 homedir에 패키지 루트를 설정합니다.

 $ NPM_PACKAGES="$HOME/.npm-packages"
 $ mkdir -p "$NPM_PACKAGES"

글로벌 패키지 설치에이 디렉토리를 사용하도록 NPM을 설정하십시오.

 $ echo "prefix = $NPM_PACKAGES" >> ~/.npmrc

.zshrc / .bashrc에 다음을 추가하여 $ NPM_PACKAGES 접두사에서 명령을 볼 수 있도록 PATH 및 MANPATH를 구성합니다.

# NPM packages in homedir
NPM_PACKAGES="$HOME/.npm-packages"

# Tell our environment about user-installed node tools
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 configuration
MANPATH="$NPM_PACKAGES/share/man:$(manpath)"

# Tell Node about these packages
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"

이제이 작업을 수행 할 때 npm install -g, NPM은에 라이브러리를 설치합니다 ~/.npm-packages/lib/node_modules, 그리고으로 실행 도구를 연결 ~/.npm-packages/bin하여에 인 PATH.

npm install -g평소처럼 사용하십시오 .

[justjake@marathon:~] $ npm install -g coffee-script
... (npm downloads stuff) ...
/home/justjake/.npm-packages/bin/coffee -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/coffee
/home/justjake/.npm-packages/bin/cake -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/cake
coffee-script@1.3.3 /home/justjake/.npm-packages/lib/node_modules/coffee-script

[justjake@marathon:~] $ which coffee
/home/justjake/.npm-packages/bin/coffee

2
당신이 공유 시스템에있는 경우 node설치되지만 npm아니라, 위의 대답에 설치를 수행 한 후 npm_config_prefix=$NPM_PACKAGES curl -L https://npmjs.org/install.sh | sh얻을 수 npm자체가 홈 디렉토리에 설치.
Tim Lewis

1
접두사 집합이 npm 2.10.1에서 나를 위해 작동하지 않으므로 결국 실행되었습니다npm config set prefix $NPM_PACKAGES
Calin

다음 스크립트는 이것을 자동화한다고 주장합니다 : github.com/glenpike/npm-g_nosudo
Mike R

$HOME/.local대신 접두사를 사용 합니다. 오늘날 다른 소프트웨어에서 로컬 파일을 저장하는 데 일반적으로 사용되는 폴더입니다.
Vaibhav K

2
당신이 사용하는 경우 : echo 'prefix = ${NPM_PACKAGES}' >> ~/.npmrc경로가 하드 코드하지 않습니다 .npmrc만, NPM이 실행 (주 I가 변경 될 때마다 NPM은 환경 변수에서 그것을 읽을 "'실행하는 변수를 확장에서 에코가, 내가 추가 한 쉘을 방지하기 위해 {}변수를 주위에 그에서 사용되는 구문이므로 .npmrc.이 작업을하려면, 내가 변경해야 않았다 .bashrc읽기 : export NPM_PACKAGES="$HOME/.npm-packages". (가) 추가 export. NPM에 그것을 사용할 수 있도록 관련없는, 당신은 추가해야합니다 생각합니다 export.뿐만 아니라 다른 변수
Matthijs Kooijman을

31

Jake의 답변은 2012 년에 게시되었으며 유용하지만 2015 년 3 월 이후 더 이상 업데이트되지 않는 Chris Lea의 Node.js PPA를 참조합니다.

내 홈 디렉토리에 Node.js 및 npm을 설치하는 데 사용하는 단계는 다음과 같습니다.

nvm을 사용 하여 Node.js를 설치합니다 ( sudo필수 없음 ).

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
source ~/.bashrc
nvm install 7
npm install -g npm  # update npm

이제 당신은 install -g없이 할 수 sudo있고 모든 것이 들어갑니다.~/.nvm/

또는 nvm없이 Node.js를 설치합니다 ( 공식 지침 ) :

Node.js 설치

  • Node.js v6 (2017 년 5 월 현재 LTS) :

    curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
  • Node.js v7 :

    curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
    sudo apt-get install -y nodejs
    

npm의 기본 디렉토리를 로컬 디렉토리로 변경합니다.

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH="$HOME/.npm-global/bin:$PATH"  # ← put this line in .bashrc
source ~/.bashrc  # if you only updated .bashrc

또는 .npm-global선택한 디렉토리로 대체하십시오 .

npm을 업데이트하고 $HOME디렉토리에 설치되어 있는지 확인하십시오 .

$ npm install npm -g
/home/<username>/.npm-global/bin/npm -> /home/<username>/.npm-global/lib/node_modules/npm/bin/npm-cli.js
/home/<username>/.npm-global/lib
└─┬ npm@3.10.6 
  ├─┬ glob@7.0.5 
  │ └── minimatch@3.0.2 
  ├── npm-user-validate@0.1.5 
  └── rimraf@2.5.3 

이제 시스템 파일을 엉망으로 install -g만들지 않고도 할 수 sudo있습니다.


두 번째 옵션은 NPM 문서 사이트에도 설명되어 있습니다 : docs.npmjs.com/getting-started/…
Vadim

6

Just Jake가 게시 한 솔루션은 훌륭합니다. 그러나 npm> 1.4.10의 버그로 인해 예상대로 작동하지 않을 수 있습니다. ( 이것이것 참조 )

버그가 해결되는 동안 다음 단계에 따라 npm 1.4.10으로 다운 그레이드 할 수 있습니다.

  1. $ HOME / .npmrc의 접두사 줄을 주석으로 처리하십시오.
  2. 운영 sudo npm install -g npm@1.4.10
  3. 올바른 버전의 npm이 설치되었는지 확인 ( npm --version)
  4. $ HOME / .npmrc에서 접두사 줄의 주석 처리를 제거하십시오.
  5. 홈 폴더에 글로벌 패키지 설치를 계속하십시오!.

4

파이썬은 이미 좋은 일을하기 때문에 virtualenv, 내가 사용 nodeenv. 와 비교 nvm하여 동일한 노드 버전에 대해 여러 환경을 만들 수 있습니다 (예 : 노드에 대해 두 개의 환경 0.10이지만 패키지 세트가 서로 다름).

ENVNAME=dev1

#  create an environment
python -m virtualenv ${ENVNAME}

# switch to the newly created env
source ${ENVNAME}/bin/activate

# install nodeenv
pip install nodeenv

# install system's node into virtualenv
nodeenv --node=system --python-virtualenv

readme는 꽤 좋습니다 : https://github.com/ekalinin/nodeenv


3

얼마 동안 @ just-jake 솔루션 을 사용 했으며 nvm 이 설정하기가 더 쉽다는 것을 알았습니다 . 또한 다양한 버전의 .NET Framework를 설치하고 사용할 수있는 훨씬 강력한 솔루션입니다 nodejs.

Ubuntu 14.04 또는 16.04 :

  1. 빌드를위한 필수 패키지 설치 nodejs:

    sudo apt-get update
    sudo apt-get install build-essential libssl-dev
    
  2. nvm 설치 :

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

    최신 버전의 nvm을 사용할 수있는 경우 nvm 사이트 에서 실제 설치 명령을 찾을 수 있습니다.

  3. nvm설치 프로그램은에 부트 스트랩 스크립트를 추가 ~/.bashrc하므로 실행하려면 터미널을 다시 열거 나 다음을 수행해야합니다.

    source ~/.bashrc
    
  4. 이제 원하는 nodejs버전을 설치하고 버전간에 전환 할 수 있습니다.

    사용 nvm ls-remote가능한 nodejs버전 을 나열하는 데 사용 합니다.

    예를 들어 nodejsv4.2.4 를 설치하려면 다음을 수행하십시오.

    # install v4.2.4
    nvm install v4.2.4 
    # use nodejs v4.2.4 in the current terminal session
    nvm use v4.2.4
    # use v4.2.4 by default in new terminal session
    nvm alias default v4.2.4
    

2

Just Jake와 user1533401이 제공 한 답변을 확장하려면 : 공유 호스팅을 사용하고 노드가 시스템 디렉토리에 설치되어 있으므로 다운 그레이드 할 수 없습니다. 이것이 내가 원한다면 npm이 전역 스크립트를 설치하는 디렉토리를 변경 한 이유이기도합니다. 같은 보트에있는 사람들을 위해 내가 찾은 또 다른 임시 수정 사항이 있습니다.

npm install -g --prefix=$(npm config get prefix) <package>

버그는 npm이 사용자 별 구성 파일을 읽지 않지만 전역 스크립트를 설치할 때마다 지정하면 문제가 해결된다는 것입니다. 여기 에서 찾았 습니다 .



0

다른 답변에는 오래된 솔루션이 있습니다 .2020의 솔루션은 NPM_CONFIG_PREFIX환경 변수를 사용하고 있습니다. ( 상세 보기 )

예를 들면

$ NPM_CONFIG_PREFIX="$HOME/.npm-packages" npm install -g ios-sim
/Users/<name>/.npm-packages/bin/ios-sim -> /Users/<name>/.npm-packages/lib/node_modules/ios-sim/bin/ios-sim
+ ios-sim@9.0.0
added 108 packages from 68 contributors in 3.094s
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.