npm 패키지의 로컬 설치를위한 사용자 지정 위치를 설정하는 방법은 무엇입니까?


177

npm install명령 플래그 또는 환경 변수를 통해에 대한 사용자 정의 패키지 대상을 지정할 수 있습니까?

기본적으로 npm 로컬 설치 node_modules는 현재 디렉토리 내에 있지만 node_modules예를 들어 다른 디렉토리 내에 설치하고 싶습니다 vendor/node_modules. 어떻게 그렇게 할 수 있습니까?


무엇을 이루려고 노력하고 있습니까? 이것은 여기에서 논의되었습니다 stackoverflow.com/questions/13668097/...을
파스칼 Belloncle을

10
@PascalBelloncle :의 하위 디렉토리에 패키지를 설치하는 대신 ./node_modulesnpm에서의 하위 디렉토리에 패키지 를 설치하려고합니다 ./vendor/node_modules. (또는 구성 할 수 없다는 말을
들으십시오

1
나는 그것이 당신이하고 싶은 일이라고 이해했지만, 나는 그것이 즉시 가능하지 않다고 생각합니다. plus require도 작동하지 않습니다. 그래서 나는 왜 당신이 이것을하고 싶었는지 묻고있었습니다. 어쩌면 원하는 것을 할 수있는 대안이있을 수 있습니다.
파스칼 Belloncle

1
바이너리 전용 패키지를 설치하고 있습니다 (즉, 명령 줄에서만 사용되며 절대 required는 안됩니다).하지만 전 세계적으로 설치하고 싶지 않습니다.
pje

내가 참조. 아래 내 제안을 참조하십시오.
Pascal Belloncle

답변:


180

TL; DR

--prefix플래그와 --global* 플래그 를 사용하여이를 수행 할 수 있습니다 .

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower

* 이것은 "글로벌"설치에도 불구하고, 설치된 쓰레기통하지 않는 명령 줄을 통해 액세스 할 수 없습니다 ~/foo/vendor/node_modules에 존재합니다 PATH.

TL; R

구성 가능한 모든 속성은 npm6 개의 다른 장소에서 설정할 수 있습니다. 우선 순위에 따라 :

  • 명령 줄 플래그 : --prefix ./vendor/node_modules
  • 환경 변수: NPM_CONFIG_PREFIX=./vendor/node_modules
  • 사용자 구성 파일 : $HOME/.npmrc또는 userconfigparam
  • 글로벌 구성 파일 : $PREFIX/etc/npmrc또는 userconfigparam
  • 내장 구성 파일 : path/to/npm/itself/npmrc
  • 기본 구성 : node_modules / npmconf / config-defs.js

기본적으로 로컬로 설치된 패키지는로 이동합니다 ./node_modules. 전역 prefix변수 는 구성 변수 로 이동 합니다 ( /usr/local기본적으로).

npm config list현재 구성을 확인 npm config edit하고 변경하기 위해 실행할 수 있습니다 .

추신

일반적으로 npm의 문서는 정말 유용합니다. 폴더 섹션은 NPM의 좋은 구조 개요하고 구성 섹션은이 질문에 대한 대답.


2
I 시험으로, 위의 명령에 따라 실제로 있다면, 그것은에 설치됩니다 ./vendor/node_modules/lib/bower사용npm#3.8.0
전자 구름

2
이렇게하면 오류가 발생합니다No version provided in package.json
FooBar

당신은 씁니다 bins won't be accessible through the command line. 이 프로그램은 물론 전체 경로 npm install eslint@3.4.0 -g --prefix c:\my_npm` calling c : \ my_npm \ eslint --fix my.js를 사용하여 호출 할 수 있습니다 .
Bernhard Döbler

13
package.json 파일과 비슷한 것을 얻을 수 있습니까? 즉 npm install, package.json 파일을 사용하여 디렉토리 A에서 실행하면 패키지가 디렉토리 B에 설치됩니다.이 솔루션은 개별 패키지를 설치하는 것으로 보입니다.
Ryan-Neal Mes

1
이 방법을 사용하여 모든 종속성을 설치하는 방법이 있습니까? npm install종속성을 로컬로 설치합니다. npm install X -g -prefix "..."접두사에 모듈 X를 설치하고 접두사에 npm install -g -prefix "..."현재 패키지를 설치합니다.
AnnanFay

28

구성에서 이것을 원하면 다음과 같이 npm 구성을 설정할 수 있습니다.

npm config set prefix "$(pwd)/vendor/node_modules"

또는

npm config set prefix "$HOME/vendor/node_modules"

구성을 확인하십시오

npm config ls -l

또는 @pje가 말하고 --prefix깃발을 사용하는 것처럼


4
이것이 전역 접두사를 설정한다고 생각합니까? 이렇게 npm install하면 여전히 로컬에 설치 ./node_modules되지만에 npm install -g설치됩니다 "$(pwd)/vendor/node_modules". 나는 이것이 전역 설정이 이상하게 행동하는 이유를 궁금해하는 설정을 잊어 버린 것을 상상할 수 있습니다.
AnnanFay

13

OSX의 경우 사용자 $HOME(아마도 / Users / yourname /) 로 이동하여 존재하지 않는 경우 .npmrc파일 (npm이 사용자 구성에 사용하는 파일)을 작성하고 npm 패키지의 디렉토리를 작성하십시오. / Users / yourname / npm에 설치하십시오. 해당 .npmrc 파일에서 "접두사"를 새 npm 디렉토리로 설정하십시오.이 디렉토리는 "전역 적으로"설치된 npm 패키지가 설치됩니다. 이러한 "전역"패키지는 분명히 사용자 계정에서만 사용할 수 있습니다.

.npmrc에서 :

prefix=${HOME}/npm

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

npm config ls -l

자체 로컬 구성과 전역 npm 구성 모두에 대한 출력을 제공해야하며 로컬 접두어 구성이 긴 출력 목록의 맨 위 근처에 반영되는 것을 볼 수 있습니다.

보안을 위해 /usr/local다른 곳에서 권장 한 것처럼 폴더 를 숨길 때 사용자 계정의 npm 동작을 구성하는 것이 좋습니다.


9

예를 들어 Windows 7에서는 다음과 같은 명령 / 작업 집합을 사용할 수 있습니다.

개인 환경 변수를 작성하십시오. 이중 백 슬래시는 필수입니다.

  • 변수 이름 : %NPM_HOME%
  • 변수 값 : C:\\SomeFolder\\SubFolder\\

이제 구성 값을 새 폴더 (예시 파일 이름)로 설정하십시오.

  • npm 폴더 설정

npm config set prefix "%NPM_HOME%\\npm"

  • npm-cache 폴더 설정

npm config set cache "%NPM_HOME%\\npm-cache"

  • npm 임시 폴더를 설정하십시오.

npm config set tmp "%NPM_HOME%\\temp"

선택적으로 원본 폴더의 내용을 제거 할 수 있습니다 구성을 변경 하기 전에 .

  • npm-cache 삭제 npm cache clear

  • npm 모듈 나열 npm -g ls

  • npm 모듈 삭제 npm -g rm name_of_package1 name_of_package2


1
고마워, 나는 단계를 따릅니다. 그러나 c : / npm_home / npm 대신 c : / % NPM_HOME % / npm 등의 디렉토리를 만듭니다.
Jay

6

공유 종속성이있는 여러 프로젝트가 DRYer가되기를 원하는 것을 직접 찾은 후에 나는 다음을 발견했습니다.

  • 로컬로 설치하는 것은 사용하려는 모든 것을위한 노드 방식입니다. require()
  • 전역 설치는 경로에 원하는 바이너리에 대한 것이지만 다음을 통한 것은 아닙니다. require()
  • 접두사를 사용하면 적절한 경로 binman경로를 추가해야 합니다.$PATH
  • npm link( info )를 사용하면 전역 설치의 소스로 로컬 설치를 사용할 수 있습니다

→ 노드 방식을 고수하고 로컬로 설치

심판 :

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