Jaka jest praktyczna różnica między npm install
i npm update
? Kiedy powinienem użyć które?
Jaka jest praktyczna różnica między npm install
i npm update
? Kiedy powinienem użyć które?
Odpowiedzi:
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
npm install --save somePackage
zapisać * w zależnościach?
postinstall
uruchamiane przy instalacji, ale nie przy aktualizacji.
install
i update
działają inaczej na adresy URL git, tagi git itp. Określone w package.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, tj 1.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 npm@2.x, nie aktualizuje swoich zależności).
Tak więc aktualizacje są dostępne, gdy masz już moduł i chcesz uzyskać nową wersję.
npm install
lub npm update
? Innymi słowy, teraz używam npm 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śnie install
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.
npm install express --save
lub lepiej zaktualizować moduł do najnowszej wersji:
npm install express@latest --save --force
--save
: Pakiet pojawi się w twoich zależnościach.
Więcej informacji: npm-install
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, a npm 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
i Makefile
został zaprojektowany do pobierania zależności, jeśli package.json
został zaktualizowany. Wywoływanie npm install
z wewnątrz Makefile
doprowadziłoby do nieskończonej rekurencji, podczas gdy wywoływanie npm update
działało dobrze, instalując wszystkie zależności, aby kompilacja mogła być kontynuowana, nawet gdyby make
została wywołana bezpośrednio.
redis
moduł i other_module
wymaga on starszej wersji redis
, npm install other_module
zagwarantuje, że other_module
użyje starszej wersji. Może dodać w other_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.json
npm install
: zainstaluj moduły węzłów zdefiniowane w pliku package.json (bez aktualizacji)
npm update
dużą liczbę zależności w package-lock.json
. Aby mieć wszystkie wymagane pakiety dostępne i package-lock.json
być poprawnym, zawsze muszę wykonać npm install
zaraz po npm update
.
~1.3
?