2012-05-16 6 views
4

내 노드 projcet에서 main.js가있는 독립 모듈을 진입 점으로 만들고 해당 모듈의 도우미를 다른 파일과 같은 폴더에 배치합니다. 지역 node_modules 폴더 :package.json-nodejs의 종속성은 무엇입니까

Ex: 
Aggregator: 
    |___package.json 
    |___main.js 
    |___node_modules 
     |_____helper1.js 
     |_____helper2.js 

따라서 노드 모듈 [어 그리 게이터 예]에 대한 모든 내 도우미 '의존성을 해결합니다. 상기 구조에 대한 이유는 내가 그 진입 점은 main.js 넣다 require이다 어 그리 게이터

Ex: 
//Sample.js 
require('Aggregator'); // Resolves to Aggregator/main.js 

예입니다 지정 내가 package.json을 사용 require

에 경로에 대해 걱정하지 않아도된다 : 수집기 모듈 package.json는

{ 
     "name": "Aggregator" 
     , "description": "Returns Aggregates" 
     , "keywords": ["aggregate"] 
     , "author": "Tamil" 
     , "contributors": [] 
     , "dependencies": { 
      "redis": "0.6.7" 
     } 
     , "lib"   : "." 
     , "main"   : "./main.js" 
     , "version"  : "1.0" 
    } 

여기 대한 의존성 칼럼 무엇인가? 나는 this 링크를 추천했다. 아무런 경고없이 redis 버전을 10000으로 지정하더라도 코드가 작동하는 것 같습니다. 프로젝트에서 Redis 모듈을 삭제하여 노드가 그 노드를 선택하고 종속성을 해결하는지 테스트하려고했지만 시도하지 않았습니다. package.json에서 종속성 속성을 사용하는시기는 언제입니까? 나중에 참조 할 때 참고 사항일까요?

npm 버전 1.1.0-beta-4; 노드 버전 v0.6.6

답변

6

dependencies 값합니다 (package.json로 표시되는) 특정 모듈이 작동하는 데 필요한 임의의 다른 모듈을 지정하는 데 사용된다. 주어진 모듈의 루트 폴더에서 npm install을 실행하면 dependencies 해시에 나열된 모듈이 모두 설치됩니다.

redis: 10000에 오류가 표시되지 않은 경우 npm install을 실행 한 적이 없으므로 redis를 설치하지 않은 것으로 추정됩니다. 코드가 npm install을 실행하지 않고 정상적으로 작동하는 경우, 코드는 처음에는 redis가 필요하지 않으며 그 항목은 dependencies 해시에서 제거되어야합니다.

package.json의 모든 항목이 일상적인 개발을 이해하는 데 필수적인 것은 아니지만 dependencies은 알고 있어야합니다. dependencies section on the npm website을 통해 읽는 것이 좋습니다.

+0

이제는 깨끗합니다 :) Nice Catch :) – Tamil

+0

그래서 우리가 구축 한 로컬 모듈에 package.json을 사용하는 것은 불필요하거나 권장하지 않습니까? 왜냐하면 내가'npm install'을 프로젝트 폴더에서 실행하면 오류가 발생합니다. 실제로 패키지는 어디에도 없기 때문에 내 로컬 코드와 종속성이 해결되지 않습니다. 나는 Aggregator가 패키지가 아니라, redis에 의존성이있는 나에 의해 만들어진 모듈이라는 것을 의미한다. 그렇다면 어떻게 해결할 수 있을까요? – Tamil

+1

로컬로 개발 된 모듈의 게시 된 종속성에'package.json'을 사용하는 것이 좋습니다. 그러나 로컬에서 개발 된 모듈을 * 다른 로컬 개발 모듈 내에서 사용해야하는 경우 몇 가지 옵션이 있으며 그 중 가장 좋은 옵션은 일반적으로'npm link '를 사용하는 것입니다. 'npm link '를 사용하면 * ModuleA *의 루트 폴더로 이동하고 간단히'npm link'를 입력하면됩니다. 그런 다음 * ModuleB *의 루트 폴더에서'npm link module-a-name'을 입력하십시오. 그런 다음 * ModuleB *가있는 곳이라면 node_modules 내에 설치되어있는 것처럼 (간단히 말해서'require ('module-a-name')') 할 수 있습니다. – jmar777

관련 문제