Jaka jest różnica między npm install a npm run build?

113

Jaka jest różnica między npm installi npm run build?

Zauważyłem w moim projekcie, że czasami npm zaczyna zawodzić, gdy npm installjest wykonywany, ale po uruchomieniu npm run builddziała dobrze.

Czym dokładnie installi czym run buildróżni się wewnętrzne działanie tych dwóch celów ?

BalajiK
źródło
1
Przyjęta odpowiedź na razie jest dyskusyjna. Myślę, że odpowiedzi z MKP i CTS_AE są bardziej aktualne w danym momencie. Z należytym szacunkiem, powinno to zostać ogłoszone przez moderatora i / lub osobę, która zadała to pytanie.
Suhas Chikkanna

Odpowiedzi:

70

npm installinstaluje zależności w node_modules/katalogu dla projektu węzła, nad którym pracujesz. Możesz wywołać installinny projekt node.js (moduł), aby zainstalować go jako zależność dla swojego projektu.

npm run buildjest aliasem dla npm buildi 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.

buildjest wywoływana przez polecenia linki install, zgodnie z dokumentacją dla kompilacji :

To jest polecenie hydrauliczne wywoływane przez npm link i npm install.

Churro
źródło
37
Downvoted od @MKP mówi npm run build, a npm buildto nie to samo. Zagłosuję ponownie, jeśli możesz udowodnić, że rzeczywiście są takie same lub poprawić swoją odpowiedź.
Hendy Irawan
Po zapoznaniu się z poprawną odpowiedzią na poniższy link, również myślę, że npm buildi npm run buildto nie to samo. IMHO, Może powyższa odpowiedź z @churro wymaga poprawienia. Proszę, popraw mnie jeśli się mylę. stackoverflow.com/questions/29939697/…
Suhas Chikkanna
1
Niestety @HendyIrawan ma rację i nie jest to to samo polecenie, jest to wysoce głosowana odpowiedź, która może zmylić niektórych ludzi. Uważam, że należy go zaktualizować.
rdarioduarte
79

NPM w 2019 r

npm buildjuż nie istnieje. Musisz npm run buildteraz zadzwonić . Więcej informacji poniżej.

TLDR;

npm install: instaluje zależności, a następnie wywołuje installz package.json scriptspola.

npm run build: uruchamia pole kompilacji z package.json scriptspola.


Pole skryptów NPM

https://docs.npmjs.com/misc/scripts

Istnieje wiele rzeczy, które możesz umieścić w package.jsonpolu 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 co npm run install
  • npm installinstaluje package.jsonzależności, a następnie uruchamiapackage.json scripts.install
    • (Zasadniczo wywołania npm run installpo zainstalowaniu zależności.
  • npm run installuruchamia tylko package.json scripts.install, nie zainstaluje zależności .
  • npm buildkiedyś było poprawnym poleceniem (kiedyś tym samym co npm 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
CTS_AE
źródło
5
+1 Ale mylące jest stwierdzenie, 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 na npm buildżywo npm run build.
bluenote10
1
Innymi słowy, czas sprawdzić włóczkę?
Moose on the Loose
44

Główna różnica to:

npm install to komenda npm cli, która wykonuje predefiniowaną rzecz, tj., jak napisał Churro, w celu zainstalowania zależności określonych w pakiecie package.json

npm run nazwa-polecenia lub npm run-script nazwa-polecenia ( np. npm run build ) jest również poleceniem cli wstępnie zdefiniowanym do uruchamiania niestandardowych skryptów o nazwie określonej w miejscu „nazwa-polecenia”. Tak więc w tym przypadku npm run build jest niestandardowym poleceniem skryptowym o nazwie „build” i zrobi wszystko, co jest w nim określone (na przykład echo „hello world” podane w poniższym przykładzie package.json).

Ponity, o których należy pamiętać:

1) Jeszcze jedno, npm buildi npm run buildsą dwie różne rzeczy, npm buildktóre zrobią tak, jak napisał Churro, ale wykonają npm run buildniestandardową pracę napisaną w środkupackage.json

2) A npm buildi npm run buildnie są takie same. Chodzi mi o to, że nie możesz określić czegoś w niestandardowym npm run buildskrypcie build ( ) i oczekiwać npm buildtego samego. Spróbuj wykonać następujące czynności, aby zweryfikować w swoim package.json:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build":"echo 'hello build'"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

i biegnij npm run buildi npm buildjeden po drugim, a zobaczysz różnicę. Więcej informacji na temat poleceń można znaleźć w dokumentacji npm .

Twoje zdrowie!!

MKP
źródło
11
Zamiast „spróbować to uruchomić”, byłbym wdzięczny, gdybyś bardziej szczegółowo wyjaśnił, jaka jest różnica między npm run buildi npm build. Ok, więc nie są takie same, w jaki sposób? Więc odpowiedź @ Churro jest niepoprawna?
Hendy Irawan
7
Tak, co npm buildpozostaje, pozostaje tajemnicą. Byłoby miło to wiedzieć. O ile wiem, npm buildzrobi tak, jak napisał Churro” nie jest prawdą. Churro powiedział, że to, co jest określone w package.jsondla buildpolecenia (jak określono w scriptssekcji I przypuszczam). Ale to właśnie npm run buildrobi i npm buildnie uruchamia polecenia budowania określonego w package.json scriptssekcji. Chyba że istnieje inny sposób zdefiniowania, co npm buildnależy zrobić w package.json, czego nie wyjaśniono tutaj, ani przez Churro (ani niestety w NPM Docs).
trollkotze
2
Spróbowałem więc i npm buildpowiedziałem, że npm WARN build npm buildwywoł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 cel npm build:(.
bluenote10
4
  • 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.js
  • npm 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 startsię nie powiedzie, to prawdopodobnie dlatego, że nazywa npm cleanlub 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 buildbezpoś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 buildnie jest to to samo co npm run script.

Nie jestem do końca pewien, co to npm buildrobi, 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.

Chanoch
źródło