2013-10-02 1 views
3

나는 DerbyJS를 배우려고 결심했다. 그리고 이것은 NodeJS에 대한 나의 첫번째 아는 사람이다.프로젝트 의존성을 전역으로 설치하고`node_modules /`없이 프로젝트를 실행하는 방법 - 어떻게?

derby new foo으로 새 노드/더비 프로젝트를 만듭니다. 또한 node_modules/ 폴더를 생성합니다. 여기에는 프로젝트가 의존하는 모든 패키지의 복사본이 들어 있습니다.

빈 Derby 프로젝트의 node_modules/ 하위 디렉토리는 144MB 크기이며 12967 개의 파일 (sic!)을 포함합니다. Ruby의 RubyGems, RVM 및 Bundler에 익숙한 사람으로서, 나는 이것을 미친 것으로 생각한다. 내가 얼마나 잘못했는지 표현할 수는 없다. (실제로 나는 그 광란에 대해 견고한 논증을 가지고있다. 그러나 StackOverflow는 논쟁의 장이 아니다.)

나는 npm의 -g 플래그가 나를 도울 것이라고 생각했다. 전 세계적으로 모든 패키지를 설치할 수 있다고 말했습니다. 그래서 :

derby new -n foo 
cd foo 
sudo npm install -g 

이제 내 프로젝트의 무게는 152KB이고 24 개의 파일이 포함되어 있습니다. 이제는 합리적입니다.

그러나 나는 그것을 실행하지 않습니다. 내가 npm start을 수행 할 때, 나는 "를 '표현'모듈을 찾을 수 없습니다"얻을 :

[email protected]:~/hello_derby2$ npm start 

> [email protected] start /home/lolmaus/hello_derby2 
> node server.js 

Master pid 29884 

module.js:340 
    throw err; 
    ^
Error: Cannot find module 'express' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:280:25) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at Object.<anonymous> (/home/lolmaus/hello_derby2/lib/server/index.js:1:77) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 

그래서 질문은 다음과 같습니다 중앙 로컬 저장소로 프로젝트의 종속성을 설치하고 F 번호를 박동하지 않고 프로젝트를 실행합니까 어떻게 내 보관 용 계정에서의 @k?

+1

시스템과의 싸움을하지 마십시오. 의존성을 로컬에 설치하는 것은 아주 좋은 일이며, 좋은 이유가 있습니다. (https://npmjs.org/doc/faq.html#Why-can-t-npm-just-put-everything-in-one- 장소와 같은 패키지 관리자). – josh3736

답변

3

npm의 faq 링크를 확인하십시오. 기본적으로 npm-link 명령을 사용하려고합니다. package.json을 살펴보고 각 종속성에 대해 sudo npm install -g <packagename>을 수행하십시오. 그런 다음 해당 패키지를 로컬 프로젝트에 연결하십시오 (npm help link 참조).

기본 동작이 아닌 이유는 여러 프로젝트의 종속성을 관리하는 것이 골치 거리라는 것입니다. 공간은 싸다고 가정합니다. 의존성의 사본을 갖는 것은 패키지 버전 충돌이 적어지기 때문에 저렴한 가격으로 간주됩니다.

+2

불행히도 Dropbox는 단순히 심볼릭 링크를 동기화하는 대신 심볼릭 링크를 역 참조하기 때문에 문제가 해결되지 않습니다. –

+1

정말 Dropbox 관련 문제입니다. (공간 절약에 대한 자세한 내용이지만 질문에 언급 된 내용 임에도 불구하고). 나는 Dropbox가 적절하게 동작하도록/자동으로 파일을 다시 링크시키는 스크립트를 함께 사용할 수 있다고 가정합니다. – AlexMA

+0

그것은 함께 잘 작동하지 않는 두 가지 소프트웨어입니다. 저는 잠시 동안 자동으로 고통없이 컴퓨터 사이에서 동기화를 즐기고 있었으며, 포기하고 싶지 않습니다. 비록 내가 Node와 함께 일해야만 할 것 같은데. –

3

프로젝트를 Dropbox에 보관하려면 Dropbox에서 맨손으로 repo를 만들고 프로젝트의 업스트림 저장소로 사용하십시오.

Dropbox가 아닌 폴더에서 프로젝트를 실행하고 node_modules 폴더를 .gitignore에 추가하십시오.

관련 문제