Jaka jest różnica między npm install
i npm run build
?
Zauważyłem w moim projekcie, że czasami npm zaczyna zawodzić, gdy npm install
jest wykonywany, ale po uruchomieniu npm run build
działa dobrze.
Czym dokładnie install
i czym run build
różni się wewnętrzne działanie tych dwóch celów ?
node.js
npm
npm-install
BalajiK
źródło
źródło
Odpowiedzi:
npm install
instaluje zależności wnode_modules/
katalogu dla projektu węzła, nad którym pracujesz. Możesz wywołaćinstall
inny projekt node.js (moduł), aby zainstalować go jako zależność dla swojego projektu.npm run build
jest aliasem dlanpm build
i nie robi nic, chyba że określisz, co robi "build" w twoim pliku package.json. Umożliwia wykonanie wszelkich niezbędnych zadań związanych z budowaniem / przygotowaniem projektu, zanim zostanie użyty w innym projekcie.build
jest wywoływana przez polecenialink
iinstall
, zgodnie z dokumentacją dla kompilacji :źródło
npm run build
, anpm build
to nie to samo. Zagłosuję ponownie, jeśli możesz udowodnić, że rzeczywiście są takie same lub poprawić swoją odpowiedź.npm build
inpm run build
to nie to samo. IMHO, Może powyższa odpowiedź z @churro wymaga poprawienia. Proszę, popraw mnie jeśli się mylę. stackoverflow.com/questions/29939697/…NPM w 2019 r
npm build
już nie istnieje. Musisznpm run build
teraz zadzwonić . Więcej informacji poniżej.TLDR;
npm install
: instaluje zależności, a następnie wywołujeinstall
zpackage.json
scripts
pola.npm run build
: uruchamia pole kompilacji zpackage.json
scripts
pola.Pole skryptów NPM
https://docs.npmjs.com/misc/scripts
Istnieje wiele rzeczy, które możesz umieścić w
package.json
polu skryptów npm . Sprawdź link do dokumentacji powyżej, więcej nad cyklem życia skryptów - większość ma haki przed i po, które można uruchamiać skrypty przed / po instalacji, publikowaniu, odinstalowywaniu, testowaniu, uruchamianiu, zatrzymywaniu, powłoce, wersji.Komplikować sprawy
npm install
to nie to samo conpm run install
npm install
instalujepackage.json
zależności, a następnie uruchamiapackage.json
scripts.install
npm run install
po zainstalowaniu zależności.npm run install
uruchamia tylkopackage.json
scripts.install
, nie zainstaluje zależności .npm build
kiedyś było poprawnym poleceniem (kiedyś tym samym conpm run build
), ale już nim nie jest; jest to teraz polecenie wewnętrzne. Jeśli go uruchomisz, otrzymasz:npm WARN build npm build called with no arguments. Did you mean to npm run-script build?
Możesz przeczytać więcej w dokumentacji: https://docs.npmjs.com/cli/buildźródło
npm build
że już nie istnieje. Nadal wychodzi w tym sensie, że jest znany / specjalny dla npm, ponieważ reaguje ostrzeżeniem, o którym wspomniałeś na dole. Zasadniczo teraz nic nie robi. To odpowiedź na pytanie innego dała najkrótsze podsumowanie nanpm build
żywonpm run build
.Ponity, o których należy pamiętać:
1) Jeszcze jedno,
npm build
inpm run build
są dwie różne rzeczy,npm build
które zrobią tak, jak napisał Churro, ale wykonająnpm run build
niestandardową pracę napisaną w środkupackage.json
2) A
npm build
inpm run build
nie są takie same. Chodzi mi o to, że nie możesz określić czegoś w niestandardowymnpm run build
skrypcie build ( ) i oczekiwaćnpm build
tego samego. Spróbuj wykonać następujące czynności, aby zweryfikować w swoimpackage.json
:i biegnij
npm run build
inpm build
jeden po drugim, a zobaczysz różnicę. Więcej informacji na temat poleceń można znaleźć w dokumentacji npm .Twoje zdrowie!!
źródło
npm run build
inpm build
. Ok, więc nie są takie same, w jaki sposób? Więc odpowiedź @ Churro jest niepoprawna?npm build
pozostaje, pozostaje tajemnicą. Byłoby miło to wiedzieć. O ile wiem, „npm build
zrobi tak, jak napisał Churro” nie jest prawdą. Churro powiedział, że to, co jest określone wpackage.json
dlabuild
polecenia (jak określono wscripts
sekcji I przypuszczam). Ale to właśnienpm run build
robi inpm build
nie uruchamia polecenia budowania określonego wpackage.json
scripts
sekcji. Chyba że istnieje inny sposób zdefiniowania, conpm build
należy zrobić wpackage.json
, czego nie wyjaśniono tutaj, ani przez Churro (ani niestety w NPM Docs).npm build
powiedziałem, że npm WARN buildnpm build
wywołany bez argumentów. Czy chciałeśnpm run-script build
? . Myślę, że to nic nie dało. Po spędzeniu czasu na przeczytaniu wszystkich odpowiedzi tutaj i wypróbowaniu tego sam, nadal nie mogę powiedzieć, jaki jest celnpm build
:(.npm install
instaluje zależności zależne w konfiguracji package.json.npm run build
uruchamia skrypt „build” i tworzy skrypt, który uruchamia twoją aplikację - powiedzmy server.jsnpm start
uruchamia skrypt „startowy”, który będzie miał postać „node server.js”Trudno jest dokładnie określić, na czym polegał problem, ale zasadniczo patrząc na konfigurację skryptów, domyślam się, że „kompilacja” używa jakiegoś narzędzia do tworzenia aplikacji, podczas gdy „start” zakłada, że kompilacja została wykonana, ale kończy się niepowodzeniem, jeśli pliku tam nie ma.
Prawdopodobnie używasz bower lub grunt - wydaje mi się, że pamiętam, że typowa aplikacja gruntowna będzie miała zdefiniowane te skrypty, a także „czysty” skrypt do usunięcia ostatniej kompilacji.
Narzędzia do budowania zwykle tworzą plik w bin /, dist / lub build / folder, który następnie wywołuje skrypt startowy - np. „Node build / server.js”. Kiedy twój
npm start
się nie powiedzie, to prawdopodobnie dlatego, że nazywanpm clean
lub podobna, aby usunąć ostatnią kompilację więc plik aplikacja nie jest obecny powodując npm zaczynają się niepowodzeniem.Kod źródłowy npm build - aby poruszyć dyskusję w tym pytaniu - jest na githubie, abyś mógł się z nim zapoznać, jeśli chcesz. Jeśli uruchamiasz
npm build
bezpośrednio i masz zdefiniowany skrypt "budujący", zakończy się on błędem z prośbą o wywołanie skryptu budującego, ponieważnpm run-script build
nie jest to to samo conpm run script
.Nie jestem do końca pewien, co to
npm build
robi, ale wydaje się, że jest to związane z postinstall i pakowaniem skryptów w zależności. Zakładam, że może to oznaczać, że wszelkie skrypty budujące CLI lub biblioteki natywne wymagane przez zależności są budowane dla określonego środowiska po pobraniu pakietu. To właśnie dlatego link i install wywołują ten skrypt.źródło