Что делают флаги --save с npm install

102

Я вижу инструкции по установке пакета с

npm install <package_name>

или

npm install <package_name> --save

или

npm install <package_name> --save-dev

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

Обромиос
источник

Ответы:

88

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 .

Обромиос
источник
3
Это был лучший ответ на мой поиск в Google по запросу «npm --save flag». Пожалуйста, подумайте об обновлении его, указав правильную информацию, т.е. что --save теперь является значением по умолчанию, а --no-save требуется, чтобы не обновлять список зависимостей в package.json
Jonas
52

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

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

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

-O, --save-optional: Пакет появится в ваших optionalDependencies.

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

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

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

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

Примеры:

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

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

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

Orange WebDev
источник
52
Хотя эта --saveопция по-прежнему работает, она больше не требуется - теперь пакеты по умолчанию сохраняются в зависимостях . Теперь логика обратная - если вы не хотите сохранять свой пакет, вам нужно указать--no-save
Coruscate5
Спасибо, @ Coruscate5 точно ответил на мой вопрос.
Кон
28

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

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

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

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

Дополнительная информация в документации по npm-install :

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

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

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

-O, --save-optional: пакет появится в ваших optionalDependencies.

--no-save: предотвращает сохранение в зависимости.

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

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

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

2xj
источник
спасибо за обновленный ответ,
отражающий
Это прояснило мои давние сомнения. Спасибо
Алок Ранджан