npm을 사용하여 현재 디렉토리에 package.json 종속성을 설치하는 방법


202

웹 응용 프로그램이 있습니다 : fooapp . 나는 package.json뿌리에 있습니다. 특정의 모든 종속성을 설치하고 싶습니다 node_modules directory. 어떻게해야합니까?

내가 원하는 것

두 가지 widget종속성 이 있다고 가정 해 봅시다 . 다음과 같은 디렉토리 구조로 끝내고 싶습니다.

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

내가 얻는 것

내가 실행할 때 나는 npm install fooapp/ 이것을 얻는다 :

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm은 node_modules 디렉토리에 내 앱 디렉토리의 사본을 만들고 다른 node_modules 디렉토리에 패키지를 설치합니다 .

패키지 설치에 적합하다는 것을 이해합니다. 그러나 나는 require()다른 웹 응용 프로그램 내에서 웹 응용 프로그램을 사용 하지 않고 직접 실행합니다. 종속성을 특정 node_modules 디렉토리에 설치하는 간단한 방법을 찾고 있습니다.

답변:


389

달리는:

npm install

여기에 설명 된 것처럼 앱 디렉토리 내부 (예 : package.json이있는 곳) 에서 모듈로 설치하지 않고 앱 의 종속성 설치합니다 . 이들은 package.json 파일과 관련하여 ./node_modules에 배치됩니다 (실제로는 이것보다 약간 더 복잡하므로 여기서 npm 문서를 확인 하십시오 ).

원하는 경우 node_modules 디렉토리를 앱의 부모 디렉토리로 자유롭게 이동할 수 있습니다. 노드의 '필수'메커니즘이이를 이해하기 때문입니다. 그러나 설치 / 업데이트로 앱의 종속성을 업데이트하려는 경우 npm은 재배치 된 'node_modules'를 보지 않고 대신 package.json을 기준으로 새 디렉토리를 만듭니다.

이를 방지하려면 앱 디렉토리에서 재배치 된 node_modules에 대한 심볼릭 링크를 만드십시오.

ln -s ../node_modules node_modules

환상적인! 시도해보고 작동하면이 답변을 수락 된 것으로 표시합니다.
Daniel Beardsley

9
그것이 작동하는 솔루션 임에도 불구하고, npm link다른 디렉토리에서 모듈을
가져와야하는

14

내 경우에는해야 할 일

sudo npm install  

내 프로젝트는 / var / www 안에 있으므로 적절한 권한을 설정해야합니다.


15
npm 설치에는 sudo가 필요하지 않을 수 있습니다.
Allen Koo

2
js 파일을 실행해야하는 사용자 및 설치된 종속성에 따라을 실행할 수 있습니다 sudo -u [username] npm install. 단지 더 나은 npm installchown사후 반복적으로 node_modules 디렉토리.
TheLonelyGhost

5
사용하지 않는 한 sudo를 사용하여 npm을 실행하지 마십시오 -g.
tkone

1
답변 해 주셔서 감사합니다. 왜 그렇습니까? 설명 할 수 있습니까? 루트 권한이있는 폴더를 유지하고 -g없이 종속성을 설치하려는 프로젝트가 있거나 필요한 경우 어떻게해야합니까? 어쩌면 좋은 이유가 있지만 sudo npm install (-g없이) 몇 번 시도했지만 아무런 문제가 없었습니다. 건배!
aesede

1
@RredCat 나는 이런 종류의 일을하는 올바른 방법에 동의하지만 잠시 후이 토론이 우분투로 이동하고 있음을 알았으므로 일부 권한과 폴더를 관리하는 방식에 문제가있는 것 같습니다. sudo npm. 다시 한 번 우분투에서만.
aesede

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