12

В чем разница между --save и --save-dev?

12

В чем разница между следующими командами:

npm install [package_name]

и:

npm install [package_name] --save

и:

npm install [package_name] --save-dev

Что это означает? Каков реальный эффект опций --save и --save-dev? Нужно ли использовать их в современных версиях npm?

5 ответ(ов)

8

В npm есть два основных флага, которые используются при добавлении пакетов:

  1. --save-dev — этот флаг используется для сохранения пакета в качестве зависимости для разработки. Например, это может быть полезно для таких задач, как юнит-тестирование или минификация кода.

  2. --save — с помощью этого флага вы можете сохранить пакет, который необходим для работы вашего приложения. Эти зависимости будут установлены на продакшн-сервере, так как они критически важны для выполнения приложения.

Таким образом, используйте --save-dev для инструментов разработки, а --save для пакетов, необходимых для работы вашего приложения в продакшен-окружении.

1

Давайте приведем пример.

Вы являетесь разработчиком очень СЕРЬЕЗНОЙ npm-библиотеки, которая использует разные библиотеки для тестирования пакета. Пользователи загружают вашу библиотеку и хотят использовать ее в своем коде. Нужно ли им загружать ваши библиотеки для тестирования? Может быть, вы используете jest для тестирования, а они предпочитают mocha. Нужно ли им устанавливать jest просто для того, чтобы использовать вашу библиотеку?

Нет, верно? Именно поэтому они находятся в devDependencies.

Когда кто-то выполняет команду npm i yourPackage, будут установлены только библиотеки, необходимые для ИСПОЛНЕНИЯ вашей библиотеки. Другие библиотеки, которые вы использовали для сборки кода или тестирования и имитации, не будут установлены, так как вы поместили их в devDependencies. Звучит удобно, не правда ли?

Теперь, почему разработчики должны указывать devDependencies?

Предположим, что ваша библиотека — это open-source проект, и сотни людей отправляют pull-запросы к вашей библиотеке. Как они будут тестировать пакет? Они сделают git clone вашего репозитория, и когда они выполнят npm i, будут установлены как dependencies, так и devDependencies.

Поскольку они не используют вашу библиотеку в привычном смысле, а разрабатывают ее дальше, им нужно пройти существующие тесты, а также написать новые. Таким образом, им необходимо использовать ваши devDependencies, где содержатся все библиотеки для тестирования/сборки/имитации, которые использовали ВЫ.

0

Идеальным примером этого является:

$ npm install typescript --save-dev

В этом случае вы хотите установить TypeScript (язык программирования, который легко парсится JavaScript) для разработки, но после развертывания приложения он больше не нужен, так как весь код был транспилирован в JavaScript. Следовательно, нет смысла включать его в опубликованное приложение. На самом деле, это просто займет место и увеличит время загрузки.

0

Флаг --save-dev сохраняет спецификацию версий (semver) в массиве "devDependencies" в вашем файле описания пакета (package.json), в то время как флаг --save сохраняет её в массиве "dependencies".

0

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

Например: модули такие как express, body-parser, lodash, helmet и mysql используются при запуске приложения, поэтому для их установки следует использовать --save, чтобы добавить их в зависимости. Модули такие как mocha, istanbul, chai и sonarqube-scanner используются только в процессе разработки, поэтому их следует добавлять в devDependencies.

Также стоит отметить, что команды npm link или npm install установят как зависимости, так и dev-зависимости в вашей папке проекта.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь