2015-06-22 19 views
8

Mam pakiet, który sam ma skrypt w swoim package.json, który chciałbym móc uruchomić w moim projekcie najwyższego poziomu. Ten pakiet jest jedną z moich zależności na najwyższym poziomie projektów. Szukam sposobu bezpośredniego lub pośredniego wywoływania skryptu pakietów zależności.Jak uruchomić skrypt npm z zależnego pakietu

Załóżmy, że nazwa modułu, nad którym pracuję, ma nazwę foo, a skrypt, który chcę uruchomić, to updateFooData.

Próbowałem użyć składni npm run-script <package> <...>, aby go uruchomić, ale wydaje się to być przestarzałą funkcjonalnością, ponieważ nie mogę go znaleźć w bieżącym official documentation, ale widzę to w innych (bardzo starych) wynikach wyszukiwania.

npm run-script foo updateFooData 

# npm ERR! missing script: foo 

Spojrzałem też na api npm i jednocześnie npm.commands.run-script(args, callback) będą robić to, co chcę, nie mogę dowiedzieć się, w jaki sposób załadować moduł do KMP

{ 
    ... 
    "scripts":{ 
    "foo:updateFooData": "node --eval \"... ??; npm.commands.run-script('updateFooData', callback)\"" 
    } 
} 

npm run foo:updateFooData 
# Obviously fails 

Jedyne co mi się już znaleźć który działa do tej pory, to CD do katalogu modułów i uruchom z niego npm. To nie jest preferowane rozwiązanie dla mnie.

cd node_modules/foo 
npm run updateFooData 

Odpowiedz

0

Coś znalazłem, że działa:

Jeśli skrypt jest uruchomiony uruchamia skrypt, można spojrzeć na ścieżkę pliku to działa i uruchomić skrypt przy użyciu wymagać:

# if node_modules/foo/package.json looks like this 
{ 
    "scripts": { 
    "updateFooData":"scripts/updateFooData.js" 
    } 
} 

# then package.json can look like this 
{ 
    "scripts": { 
    "foo:updateFooData":"node --eval \"require('foo/scripts/updateFooData.js')\"" 
    } 
} 

# or package.json can look like this 
{ 
    "scripts": { 
    "foo:updateFooData":"node node_modules/foo/scripts/updateFooData.js" 
    } 
} 

# and you can run it like this 
npm run foo:updateFooData 

Nie podoba mi się to rozwiązanie, ponieważ działa tylko wtedy, gdy skrypt npm, którego używasz, jest plikiem. Nie dotyczy to wszystkich

11

Wpadłem na to, próbując uruchomić skrypt updatedb dla geoip-lite. Powinieneś użyć narzędzia npm explore command, które spowoduje utworzenie nowej powłoki w katalogu zależności.

Więc dla przypadku użycia, spróbuj npm explore foo -- npm run updateFooData

+1

Kopiuj-wklej: 'npm zbadać GeoIP-Lite - NPM uruchomić updatedb' – aluxian

+2

Jako przestrodze uwaga, to nie działa dla okien https://github.com/npm/npm/issues/8932 – Darly

+1

niesamowite, przyszedł tutaj, aby zautomatyzować aktualizację geoip-lite i dowiedziałem się o poleceniu eksploracji. – dmo

Powiązane problemy