2014-12-31 19 views
5

Yükleme süresinde kullanıcıların hangi kalıcı motorun kullanılacağını, yani dosya tabanlı, MongoDB veya Redis olduğunu belirtmek istediğim bir hizmetim var ve yalnızca gerekli modülleri indirdiğiniz bazı npm sihrini arıyorum. (yok, mongodb veya redis, sırasıyla).npm package.json içinde isteğe bağlı modül bağımlılıkları belirtebilir miyim?

Bu mümkün mü? Package.json'daki bağımlılıkları ve devDependencies tanımlamaktan başka bir seçenek bulamıyorum ve bu uygun değil. Ayrıca, mongodb ve redis modülleri göreceli olarak küçük olsa da, isteğe bağlı olarak RMI iletişimi için Java'ya ihtiyaç duyabileceğiniz alternatif bir durumu da göz önünde bulundurun.

Teşekkürler!

+0

Bir ['optionalDependencies alanı '(https://docs.npmjs.com/files/package.json#optionaldependencies) var, ancak aradığınız şey bu değil. – Scimonster

+0

Aslında bunun yeterli olacağını düşünüyorum. İsteğe bağlı bir mongodb yüklenemiyorsa, C++ derleyici veya isteğe bağlı bir node-jmx başarısız olduğundan, JRE olmadığından başarısız olur, o zaman sorun olmaz. Ayrıca, belgeler sadece JS kodunu gösterir, ancak package.json'da '' optionalDependencies ': {} 'ekleyebilir ve çalışır. Bunun etrafındaki bir şeyi cevabınıza eklerseniz, doğru bir şekilde işaretleyeceğim. – anthonyserious

cevap

2

Yükleme sonrası komut dosyası kullanmak ve sonra bunları yüklemek isteyebilirsiniz.

npm module'u kullanarak program aracılığıyla yükleyin.

Yani, böyle bir şey yapabilir: Şimdi, böyle bir şey yapmadım

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'); 
    }); 
}); 

, bu yüzden de load programlı npm install belgelerine bakmak ve tavsiye ediyoruz.

+0

İlginç. Kurulum sonrası bir betiği çalıştırmak elbette çalışabilir, ancak tek satırlık bir çözüm bekliyorum. Ayrıca, bu uygulama daha önce dağıtıldıktan sonra bir uygulama içinden paketlerin indirilmesi konusunda da garip hissediyorum. – anthonyserious

+0

Bu yaklaşımı, npm'in api kullanmamanızı tavsiye ettiği için tavsiye etmem: [_Npm programatik olarak kullanılabilir, API'sı sadece CLI tarafından kullanılmak içindir ve başka herhangi bir amaca uygunluğu konusunda herhangi bir garanti verilmez. _] (https://github.com/npm/npm#using-npm-programmatically) Bunun yerine [bu yaklaşımı] kullanabilirsiniz (http://stackoverflow.com/a/17537559/516433) – Lucas

İlgili konular