2014-12-31 2 views
5

필자는 설치시 사용자가 파일 기반, MongoDB 또는 Redis와 같은 사용할 퍼시스턴스 엔진을 지정할 수있는 서비스를 제공하고 필요한 모듈 만 다운로드 할 수있는 npm 매직을 찾고 있습니다 (각각 없음, mongodb 또는 redis).npm package.json에 선택적 모듈 종속성을 지정할 수 있습니까?

이것이 가능합니까? package.json에서 종속성 및 devDependencies를 정의하는 것 외에는 다른 옵션을 찾을 수 없으며 이는 적합하지 않습니다.

mongodb 및 redis 모듈은 상대적으로 작지만 대체로 Java for RMI 통신이 필요할 수도있는 대체 사례를 고려하십시오.

감사합니다.

+0

['optionalDependencies' 필드] (https://docs.npmjs.com/files/package.json#optionaldependencies)가 있습니다 만, 그것이 당신이 찾고있는 것이 아닙니다. – Scimonster

+0

사실 나는 그것이 충분하다고 생각합니다. 선택적 mongodb가 C++ 컴파일러가 없기 때문에 설치에 실패하거나 JRE가 없기 때문에 선택적 노드 -jmx가 실패하면 괜찮습니다. 또한 문서에는 JS 코드 만 표시되어 있지만 package.json에''optionalDependencies : {}'를 추가하면됩니다. 이 문제를 해결하기 위해 무언가를 수정하면 올바른 것으로 표시됩니다. – anthonyserious

답변

2

설치 후 스크립트를 사용하여 설치하는 것이 좋습니다.

프로그래밍 방식으로 npm module을 사용하여 설치할 수 있습니다.

그래서, 당신은 다음과 같이 할 수있다 : 지금, 나는 이런 식으로 뭔가를 해본 적이있다

var npm = require('npm'); // make sure npm is in your package.json! 
npm.load({/* some object properties, if needed */}, function(err) { 
    if (err) {return handleError(err)} 
    if (usingMongoDB) { 
     npm.commands.install(['mongodb'], function(err){ 
     if (err) {return handleError(err)} 
     console.log('mongodb successfully installed'); 
    }); 
}); 

을, 그래서 당신은 또한 load 프로그램 npm install에 대한 설명서를 보면, 및 좋습니다.

+0

흥미 롭습니다. 설치 후 스크립트를 실행하는 것은 물론 가능하지만 한 줄짜리 솔루션이 필요합니다. 또한 앱이 이미 배포 된 후에 앱에서 패키지를 다운로드하는 것에 대해 이상하게 생각합니다. – anthonyserious

+0

npm은 api를 사용하지 말 것을 경고하므로이 방법을 권장하지 않습니다. [_Although npm은 프로그래밍 방식으로 사용할 수 있으며 해당 API는 CLI에서만 사용하기위한 것이므로 다른 용도로는 적합하지 않습니다. _] (https://github.com/npm/npm#using-npm-programmatically) 대신 [이 방법] (http://stackoverflow.com/a/17537559/516433)을 사용할 수 있습니다. – Lucas

관련 문제