Co robią flagi --save z poleceniem npm install

107

Widzę instrukcje instalacji pakietu z jednym z nich

npm install <package_name>

lub

npm install <package_name> --save

lub

npm install <package_name> --save-dev

Jaka jest różnica między tymi opcjami?

Obromios
źródło

Odpowiedzi:

94

npm install <package_name> --saveinstaluje pakiet i aktualizuje zależności w pliku package.json. Odkąd padło to pytanie nastąpiła zmiana na npm, taka, --savektóra stała się opcją domyślną, więc nie trzeba używać--save aktualizowania zależności.

npm install <package_name> --no_save instaluje pakiet, ale nie aktualizuje zależności, które są wymienione w pliku package.json.

npm install <package_name> ---save-devaktualizuje devDependenciesw pakiecie. Są one używane tylko do lokalnego testowania i programowania.

Możesz przeczytać więcej na https://docs.npmjs.com/getting-started/using-a-package.json .

Obromios
źródło
3
To była najlepsza odpowiedź dla mojej wyszukiwarki Google na „npm --save flag”. Proszę rozważyć zaktualizowanie go o poprawne informacje, tj. --Save jest teraz wartością domyślną, a --no-save jest wymagane, aby nie aktualizować listy zależności w package.json
Jonas Rosenqvist
54

npm install pobiera 3 ekskluzywne, opcjonalne flagi, które zapisują lub aktualizują wersję pakietu w głównym pliku package.json:

-S, --save: Pakiet pojawi się w Twoich zależnościach.

-D, --save-dev: Pakiet pojawi się w twoim devDependencies.

-O, --save-optional: Pakiet pojawi się w opcjonalnych zależnościach.

Podczas korzystania z dowolnej z powyższych opcji do zapisywania zależności w pliku package.json, istnieje dodatkowa, opcjonalna flaga:

-E, --save-exact: Zapisane zależności zostaną skonfigurowane z dokładną wersją zamiast przy użyciu domyślnego operatora zakresu semver npm. Ponadto, jeśli masz plik npm-shrinkwrap.json, zostanie on również zaktualizowany.

<scope>jest opcjonalne. Pakiet zostanie pobrany z rejestru związanego z określonym zakresem. Jeśli żaden rejestr nie jest powiązany z podanym zakresem, przyjmowany jest rejestr domyślny. Zobacz npm-scope.

Uwaga: jeśli nie dołączysz @ -symbol do nazwy zakresu, npm zinterpretuje to jako repozytorium GitHub, patrz poniżej. Po nazwach zakresów należy także umieścić ukośnik.

Przykłady:

npm install sax --save
npm install githubname/reponame
npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save --save-exact

Uwaga: Jeśli istnieje plik lub folder o nazwie <name>w bieżącym katalogu roboczym, spróbuje go zainstalować i spróbuje pobrać pakiet według nazwy tylko wtedy, gdy jest nieprawidłowy.

(z oficjalnych dokumentów) https://docs.npmjs.com/cli/install

Orange WebDev
źródło
52
Chociaż --saveopcja wydaje się nadal działać, nie jest już wymagana - pakiety są teraz domyślnie zapisywane w zależnościach . Logika jest teraz odwrócona - jeśli nie chcesz zapisywać paczki, musisz określić--no-save
Coruscate5
Dzięki, @ Coruscate5 dokładnie odpowiedział na moje pytanie.
Kon
31

--saveFlaga nie służy określonemu celowi.

Wcześniej, jak zauważono w innych odpowiedziach, --saveflaga aktualizowała zależności w package.jsonpliku projektu , ale npm installteraz domyślnie zawiera tę funkcję.

W tym momencie, jeśli chcesz zapobiec npm installzapisywaniu zależności, musisz użyć --no-saveflagi.

Dziękuję Coruscate5 za wspomnienie o tym w komentarzu .

Więcej informacji w dokumentacji npm-install :

npm install domyślnie zapisuje wszystkie określone pakiety w zależnościach. Dodatkowo możesz kontrolować, gdzie i jak są zapisywane za pomocą dodatkowych flag:

-P, --save-prod: pakiet pojawi się w twoich zależnościach. Jest to ustawienie domyślne, chyba że obecne są -D lub -O.

-D, --save-dev: pakiet pojawi się w twoich devDependencies.

-O, --save-optional: pakiet pojawi się w Twoich opcjonalnych zależnościach.

--no-save: zapobiega zapisywaniu do zależności.

Podczas korzystania z dowolnej z powyższych opcji zapisywania zależności w pliku package.json istnieją dwie dodatkowe, opcjonalne flagi:

-E, --save-exact: zapisane zależności zostaną skonfigurowane z dokładną wersją, a nie przy użyciu domyślnego operatora zakresu semver npm.

-B, --save-bundle: Zapisane zależności również zostaną dodane do twojej listy bundleDependencies.

2xj
źródło
dzięki za zaktualizowaną odpowiedź na obecną sytuację
DrCord
To wyjaśniło moje długotrwałe wątpliwości. Dzięki
Alok Ranjan