Jaka jest praktyczna różnica między npm install
i npm update
? Kiedy powinienem użyć które?
519
Różnica między instalacją npm a obsługą aktualizacji npm dla wersji pakietu określonych w package.json :
{
"name": "my-project",
"version": "1.0", // install update
"dependencies": { // ------------------
"already-installed-versionless-module": "*", // ignores "1.0" -> "1.1"
"already-installed-semver-module": "^1.4.3" // ignores "1.4.3" -> "1.5.2"
"already-installed-versioned-module": "3.4.1" // ignores ignores
"not-yet-installed-versionless-module": "*", // installs installs
"not-yet-installed-semver-module": "^4.2.1" // installs installs
"not-yet-installed-versioned-module": "2.7.8" // installs installs
}
}
Podsumowanie : jedyną dużą różnicą jest to, że już zainstalowany moduł z rozmytą wersją ...
npm install
npm update
Dodatkowo : install
i update
domyślnie obsługujemy devDependencies w różny sposób
npm install
będzie instalacja / aktualizacja devDependencies chyba że --production
flaga jest dodawanynpm update
będzie ignorować devDependencies chyba że --dev
flaga jest dodawanyPo npm install
co w ogóle korzystać?
Ponieważ npm install
robi więcej, gdy spojrzysz poza obsługą swoich zależności package.json
. Jak widać w instalacji npm , możesz ...
PATH
) za pomocąnpm install -g <name>
--force
~1.3
?npm install --save somePackage
zapisać * w zależnościach?postinstall
uruchamiane przy instalacji, ale nie przy aktualizacji.install
iupdate
działają inaczej na adresy URL git, tagi git itp. Określone wpackage.json
wtedy, byłoby dobrze dodać te przypadki do przykładu.1.3.0 -> 1.3.1
Jest to podobne do tego^1.3.0
, w którym^
aktualizacje główne, tj1.3.0 -> 1.4.0
.Instalacja npm instaluje wszystkie moduły wymienione w
package.json
pliku i ich zależności.Aktualizacja npm aktualizuje wszystkie pakiety w
node_modules
katalogu i ich zależności.npm install express instaluje tylko moduł express i jego zależności.
npm update express updates moduł ekspresowy (zaczynając od [email protected], nie aktualizuje swoich zależności).
Tak więc aktualizacje są dostępne, gdy masz już moduł i chcesz uzyskać nową wersję.
źródło
npm install
lubnpm update
? Innymi słowy, teraz używamnpm install
i wydaje się, że także aktualizuje, czy jest jakiś powód, dla którego powinienem kiedykolwiek używaćnpm update
?update
zawsze będzie aktualizować do najnowszej wersji, niezależnie od pliku package.json, a jednocześnieinstall
będzie przestrzegać wersji podanej w pakiecie.json?update
instaluje (lub aktualizuje) najnowszą wersję modułu.install
instaluje najnowszą wersję modułu, jeśli jej nie zaprezentowano, w przeciwnym razie zachowuje aktualną wersję.npm update
zaktualizuje się do najnowszej wersji na podstawie pliku package.json, niezależnie od tego. Jeśli masz „express”: „3.x” i korzystasz z wersji 3.1.0, zaktualizuje się do najnowszego znacznika 3.x. Jeśli dostępna jest wersja 4.x, nie zostanie ona zainstalowana najnowsza.W większości przypadków spowoduje to zainstalowanie najnowszej wersji modułu opublikowanej na npm.
lub lepiej zaktualizować moduł do najnowszej wersji:
--save
: Pakiet pojawi się w twoich zależnościach.Więcej informacji: npm-install
źródło
npm install express@latest --save --force
było dokładnie to, czego chciałem.Wiele wyróżnień zostało już wspomnianych. Oto jeszcze jeden:
Uruchomiony
npm install
w górnej części katalogu źródłowego będzie działać różne scenariusze:prepublish
,preinstall
,install
,postinstall
. W zależności od tego, co robią te skrypty, anpm install
może wykonać znacznie więcej pracy niż instalacja zależności.Właśnie miałem przypadek użycia, w którym
prepublish
zadzwonił,make
iMakefile
został zaprojektowany do pobierania zależności, jeślipackage.json
został zaktualizowany. Wywoływanienpm install
z wewnątrzMakefile
doprowadziłoby do nieskończonej rekurencji, podczas gdy wywoływanienpm update
działało dobrze, instalując wszystkie zależności, aby kompilacja mogła być kontynuowana, nawet gdybymake
została wywołana bezpośrednio.źródło
redis
moduł iother_module
wymaga on starszej wersjiredis
,npm install other_module
zagwarantuje, żeother_module
użyje starszej wersji. Może dodać wother_module/node_modules/redis
razie potrzeby.npm update
: zainstaluj i zaktualizuj za pomocą najnowszych modułów węzłów znajdujących się w pliku package.jsonnpm install
: zainstaluj moduły węzłów zdefiniowane w pliku package.json (bez aktualizacji)źródło
npm update
dużą liczbę zależności wpackage-lock.json
. Aby mieć wszystkie wymagane pakiety dostępne ipackage-lock.json
być poprawnym, zawsze muszę wykonaćnpm install
zaraz ponpm update
.