2014-12-31 10 views
5

Mam usługę, w której chcę zezwolić użytkownikom w czasie instalacji na określenie używanego silnika utrwalania, np. Opartego na plikach, MongoDB lub Redis, i szukam magii npm, do której wystarczy tylko pobrać niezbędne moduły (none, mongodb lub redis, odpowiednio).Czy mogę określić opcjonalne zależności modułów w npm pakiet.json?

Czy to możliwe? Nie mogę znaleźć żadnych innych opcji poza zdefiniowaniem zależności i zależności w pakiecie.json, a to nie jest odpowiednie do tego.

Należy również pamiętać, że chociaż moduły mongodb i redis mogą być względnie małe, należy rozważyć alternatywny przypadek, w którym opcjonalnie może być wymagana Java dla komunikacji RMI.

Dzięki!

+0

Istnieje pole ['optionalDependencies'] (https://docs.npmjs.com/files/package.json#optionaldependencies), ale to nie jest to, czego szukasz. – Scimonster

+0

Właściwie uważam, że wystarczy. Jeśli opcjonalny mongodb nie powiedzie się, ponieważ nie ma kompilatora C++ lub opcjonalny węzeł-jmx nie działa, ponieważ nie ma JRE, to jest w porządku. Również dokumentacja pokazuje kod JS, ale możesz dodać '" optionalDependencies ": {}' w twoim package.json i to działa. Jeśli edytujesz coś w tej sprawie w swojej odpowiedzi, zaznaczę to poprawnie. – anthonyserious

Odpowiedz

2

Możesz użyć skryptu po instalacji, a następnie zainstaluj go.

Można instalować programowo, używając programu npm module.

Tak, można zrobić coś takiego:

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

Teraz ja nigdy nie zrobił czegoś takiego, więc polecam spojrzeć na dokumentacji programowej npm install, a także load.

+0

Interesujące. Uruchomienie skryptu poinstalacyjnego może oczywiście zadziałać, ale mam nadzieję na rozwiązanie jednoliniowe. Czułbym się też dziwnie, jeśli chodzi o pobieranie pakietów z poziomu aplikacji po jej wdrożeniu. – anthonyserious

+0

Nie polecam tego podejścia, ponieważ npm ostrzega Cię, aby nie używać jego api: [_Alko można używać programisty, jego API jest przeznaczone tylko do użytku przez CLI i nie ma żadnych gwarancji odnośnie jego przydatności do jakichkolwiek innych celów. _] (https://github.com/npm/npm#using-npm-programmically) Zamiast tego możesz użyć [tego podejścia] (http://stackoverflow.com/a/17537559/516433) – Lucas

Powiązane problemy