package.json에 node_modules 경로 지정


96

bower가 bowerrc 파일에서하는 것처럼 / vendor / node_modules라고 가정 해 보도록 애플리케이션에서 node_modules 디렉토리를 이동하는 방법이 있습니까? package.json에 지정할 수 있다고 생각했지만 해결책을 찾을 수없는 것 같습니다. 귀하의 도움에 감사드립니다.



@blunderboy 링크 주셔서 감사합니다. 더 쉬운 방법이 없다는 것은 미친 짓입니다. 오 잘.
sturoid

26
질문에 대한 답이 명확하지 않은 답변을 왜 수락했는지 모르겠습니다. 당신의 경로를 설정하는 방법을 질문 node_modules package.json , 그리고 xShirase의 대답은 단순히 할 수있는 방법을 제공하지 않습니다.
Mark Amery

4
그는 아마도 이것이 XY 문제 이고 "죄송합니다. 불가능합니다."보다 다른 해결책이 더 낫기 때문에 대답을 받아 들였을 것입니다 .
Jake Holzinger 2019

답변:


58

예, 가능합니다. NODE_PATH 환경 변수를 설정하십시오.

export NODE_PATH='yourdir'/node_modules

문서에 따르면 :

NODE_PATH 환경 변수가 콜론으로 구분 된 절대 경로 목록으로 설정된 경우 노드는 다른 곳에서 찾을 수없는 경우 해당 경로에서 모듈을 검색합니다. (참고 : Windows에서 NODE_PATH는 콜론 대신 세미콜론으로 구분됩니다.)

또한 노드는 다음 위치에서 검색합니다.

1 : $ HOME / .node_modules

2 : $ HOME / .node_libraries

3 : $ PREFIX / lib / node

여기서 $ HOME은 사용자의 홈 디렉토리이고 $ PREFIX는 노드의 구성된 node_prefix입니다.

이것은 대부분 역사적인 이유 때문입니다. 종속 항목을 node_modules 폴더에 로컬로 배치하는 것이 좋습니다. 더 빠르고 안정적으로로드됩니다.

출처


1
그거 좋네. 그래서 내가 구축하는 각 응용 프로그램에 대한 로컬 node_modules가있는 경우 프로젝트의 js 파일로 내보낼 수 있습니까?
sturoid

3
아니요, 환경 변수이며 시스템 수준에서 설정됩니다. 따라서 터미널에 입력해야합니다. ENV 변수에 노드 응용 프로그램 내에서 액세스process.env
xShirase

흠 좋은데. 좀 더 조사 해봐야겠습니다. 도와 주셔서 감사합니다.
sturoid 2014

112
나는 이것이 질문에 대한 답이라고 생각하지 않습니다. 그는 package.json 내에 속성을 요청하여 LOCAL (응용 프로그램 수준) npm-Packages에 대한 경로를 입력했습니다. 이 대답은 GLOBALLY (-g) 설치된 패키지를 다른 폴더로 이동할 수있는 방법을 알려줍니다.
데이비드 Losert

2
@IsmailIqbal 방금 귀하의 의견을 봤습니다. NPM 세계에서 2 년이 지났고 우리는 캐싱, yarn 또는 npm5, webpack으로 상당히 도약했습니다. 요즘에는 node_module을 처리하는 것이 훨씬 더 좋다고 말하고 싶습니다. 당신의 경우, 나는 단순히 모든 위치에서 "npm 설치"를 수행 할 것입니다. npm은 이미 설치된 패키지를 캐시하기 때문에 오버 헤드없이 수동으로 복사하는 것과 같습니다.
David Losert

28

요컨대 : 불가능하며 지원되지 않는 것처럼 보입니다 (여기 https://github.com/npm/npm/issues/775 참조 ).

CLI 또는 ENV-Variables (현재 선택된 답변 참조), .npmrc-Config-Files 또는 공통점을 사용하는 몇 가지 해키 해결 방법이 있습니다 npm link. 의 global솔루션.

저에게는 프로젝트에 기여한 사람들이 항상 특별한 구성을 만들거나 특별한 지식이 필요하기 때문에 이러한 솔루션 중 어느 것도 정말 깨끗한 것은 아닙니다 npm install.

따라서 : package.json을 node_modules를 설치하려는 동일한 디렉토리에 두거나 항상 프로젝트의 루트 디렉토리에 있다는 사실을 알고 있어야합니다.


16
""node_modules "의 철자를 다르게 쓰고 싶다면 미안하지만 할 수 없습니다. 이것은 노드 코어에 내장되어 있습니다. 변경은 완전히 다른 패키지 관리자를 구축하는 것과 같습니다." <== 내가 추측하는 변수를 사용하는 것이 좋습니다.
stevedbrown

2019 년 댓글 : yarn이 모듈 디렉토리 재정의를 지원하는 것 같습니다. 글쎄, 얀은 새로운 패키지 관리자라고 생각합니다.
Vanuan 2019 년

10

Yarn은이 기능을 지원합니다.

# .yarnrc file in project root
--modules-folder /node_modules

그러나 사용하는 패키지에 따라 경험이 다를 수 있습니다. 그 토끼 굴에 들어가고 싶을 지 모르겠네요.


6

이것이 당신이 염두에 두었던 것인지 확실 node_modules하지 않지만 심볼릭 링크를 지원하지 않는 파일 시스템 (VM "공유"폴더)에 마운트 되었기 때문에 내 프로젝트 디렉토리 안에 설치할 수 없었기 때문에이 질문에 끝났습니다. ).

다음 해결 방법을 찾았습니다.

  1. package.json파일을 다른 파일 시스템의 임시 폴더에 복사합니다.
  2. npm install거기에서 실행
  3. 심볼릭 링크를 복사본으로 확장 node_modules하는 cp -r --dereference데 사용하여 결과 디렉토리를 프로젝트 디렉토리에 다시 복사합니다.

나는 이것이 node_modules다른 파일 시스템 으로 이동하는 방법을 찾을 때이 질문을 끝내는 다른 사람에게 도움이되기를 바랍니다 .

다른 옵션

@Charminbear가 연결된 github 문제에서 찾은 또 다른 해결 방법 이 있지만 https://github.com/browserify/resolve/issues/136에 따라 grunt지원하지 않기 때문에 작동 하지 않습니다 .NODE_PATH

당신이 말할 수 /media/sf_shared그리고 당신은 당신이 실제로 NPM에서 설치할 수없는 의미, 거기에 심볼릭 링크를 설치할 수없는 /media/sf_shared/myproject일부 모듈은 심볼릭 링크를 사용하기 때문이다.

  • $ mkdir /home/dan/myproject && cd /home/dan/myproject
  • $ ln -s /media/sf_shared/myproject/package.json (이 방향으로 심볼릭 링크를 할 수 있지만 / media / sf_shared 내부에 하나를 만들 수 없습니다)
  • $ npm install
  • $ cd /media/sf_shared/myproject
  • $ NODE_PATH=/home/dan/myproject/node_modules node index.js
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.