2016-01-22 17 views
13

Chcę spróbować użyć polecenia npm do uruchamiania różnych zadań kompilacji dla aplikacji internetowej. Wiem, że mogę to zrobić, dodając pole scripts do mojego package.json tak:Uruchamianie skryptów bash za pomocą npm

"scripts": { 
    "build": "some build command" 
}, 

To dostaje nieporęczny kiedy trzeba bardziej skomplikowanych komend z wieloma opcjami. Czy można przenieść te polecenia do skryptu Bash lub czegoś podobnego? Coś jak:

"scripts": { 
    "build": "build.sh" 
}, 

gdzie npm run build byłoby wykonać polecenia w pliku build.sh?

Czytanie przezpost wydaje się takie, jakie jest, ale nie jestem pewien dokładnie, gdzie mam upuścić plik build.sh lub jeśli czegoś brakuje.

+7

Nie rób tego. Węzeł działa wszędzie. Bash nie. Cokolwiek robisz w bashu możesz zrobić ** w węźle **, a nawet wywołanie CLI może być wykonane przy użyciu zależności pakietu. Potrzebujesz 'rm'? zainstaluj rimraf, a następnie użyj go w skrypcie [npm] (http://www.slideshare.net/k88hudson/advanced-frontend-automation-with-npm-scripts). 'mkdir -p'? zainstaluj 'mkdirp', a następnie użyj tego w skrypcie npm. Masz niezależny od platformy * uniwersalny język skryptowy *, tutaj nie idź i udawaj, że to tylko Nix. Czy linia poleceń jest zbyt skomplikowana? Użyj programu uruchamiającego zadania, takiego jak 'grunt' lub' gulp'. Zachowaj to uniwersalne. –

+1

Kiedy mówisz "nawet wywołanie CLI może być wykonane przy użyciu zależności pakietu", czy mówisz o czymś takim jak [this] (http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool -with-npm)? –

+0

zamknij, ale nie, przeczytaj slajdy, do których dołączyłem. Możesz instalować moduły węzła, które są dostarczane z narzędziami CLI, takie jak 'grunt' lub' gulp', lub 'mkdirp', itp., Bez potrzeby instalowania ich globalnie, a następnie * wywoływanie ich tak, jakby były zainstalowane globalnie * w skrypcie npm, np. '' build ': "mkdirp build && less style/index.less> static/css/style.css && webpack" '. Dopóki polecenia, które wywołujesz, są zarządzane npm (tj. W wykazach zależności package.json), to po prostu działa. Dla każdego polecenia "działa tylko dla jednego systemu operacyjnego" użyj modułu węzła, który robi to samo uniwersalnie. –

Odpowiedz

23

Its całkowicie możliwe ...

"scripts": { 
    "build": "./build.sh" 
}, 

też, upewnij się umieścić huk skrótu u góry pliku bash #!/usr/bin/env bash

również upewnić się, że masz uprawnienia do wykonywania pliku

chmod +x ./build.sh 
+0

Gdzie znajdowałby się plik bash? Czy musi znajdować się w katalogu bin bin_modules? –

+1

możesz umieścić go gdzie chcesz, tylko upewnij się, że wstawiłeś względną ścieżkę w package.json np. '" Kompilacja ":" ./path/to/my/awesome/build/file/build.sh "' – eblahm

+0

co to jest z. z przodu? Dlaczego nie jest to po prostu "build": "./build.sh"? –

Powiązane problemy