Что делают флаги -save с установкой npm

Я вижу инструкции по установке пакета с помощью

npm install <package_name>

или

npm install <package_name> --save

или

npm install <package_name> --save-dev

В чем разница между этими вариантами?

Ответ 1

npm install <package_name> --save устанавливает пакет и обновляет зависимости в вашем package.json. Так как этот вопрос был задан, в npm произошли изменения, так что --save стал опцией по умолчанию, поэтому вам не нужно использовать --save для обновления зависимостей.

npm install <package_name> --no_save устанавливает пакет, но не обновляет зависимости, перечисленные в вашем package.json.

npm install <package_name> ---save-dev обновляет devDependencies в вашем пакете. Они используются только для локального тестирования и разработки.

Вы можете прочитать больше на https://docs.npmjs.com/getting-started/using-a-package.json.

Ответ 2

npm install принимает 3 эксклюзивных, необязательных флага, которые сохраняют или обновляют версию пакета в вашем основном пакете. json:

-S, --save: пакет появится в ваших зависимостях.

-D, --save-dev: пакет появится в ваших devDependencies.

-O, --save-optional: Пакет появится в ваших дополнительных опциях.

При использовании любой из вышеперечисленных опций для сохранения зависимостей с вашим пакетом .json существует дополнительный необязательный флаг:

-E, --save-exact: сохраненные зависимости будут сконфигурированы с точной версией, а не с помощью оператора nver по умолчанию. Кроме того, если у вас есть npm-shrinkwrap.json, он также будет обновлен.

<scope> является необязательным. Пакет будет загружен из реестра, связанного с указанной областью. Если реестр не связан с данной областью, предполагается, что используется реестр по умолчанию. См. Npm-scope.

Примечание. Если вы не укажете @-символ в своем имени области, npm будет интерпретировать это как репозиторий GitHub, см. ниже. Названия областей также должны сопровождаться косой чертой.

Примеры:

npm install sax --save npm установить githubname/reponame npm install @myorg/privatepackage npm install node -tap --save-dev npm установить dtrace-provider --save-optional npm install readable-stream --save --save-exact

Примечание. Если в текущем рабочем каталоге есть файл или папка с именем <name>, тогда он попытается установить это и попытаться получить пакет по имени, если он недействителен.

(из официальных документов) https://docs.npmjs.com/cli/install

Ответ 3

Флаг --save больше не служит цели.

Ранее, как отмечалось в других ответах, флаг --save обновлял зависимости в файле проекта package.json, но npm install теперь включает эту функцию по умолчанию.

На этом этапе, если вы хотите запретить npm install сохранять зависимости, вы должны использовать флаг --no-save.

Спасибо Coruscate5 за упоминание этого в комментарии.

Подробнее в документации по установке npm:

npm install сохраняет все указанные пакеты в зависимости по умолчанию. Кроме того, вы можете контролировать, где и как они сохраняются с помощью некоторых дополнительных флагов:

-P, --save -P rod: Пакет появится в ваших зависимостях. Это значение по умолчанию, если нет -D или -O.

-D, --save -D ev: Пакет появится в ваших devDependencies.

-O, --save -O ptional: Пакет будет отображаться в ваших необязательных зависимостях.

--no-save: Prevents saving to dependencies.

При использовании любого из вышеперечисленных параметров для сохранения зависимостей в ваш package.json есть два дополнительных необязательных флага:

-E, --save -E xact: Сохраненные зависимости будут настроены с точной версией, а не с использованием оператора диапазона по умолчанию для npms.

-B, --save -B undle: Сохраненные зависимости также будут добавлены в список bundleDependencies.