В чем разница между --save и --save-dev?
в чем разница между:
npm install [имя_пакета] --save
и
npm install [имя_пакета] --save-dev
Что это значит?
9 ответов
-
--save-dev
используется для сохранения пакета в целях разработки. Пример: модульные тесты, минимизация.. -
--save
используется для сохранения пакет, необходимый для запуска приложения.
разницу между --save
и --save-dev
может быть не сразу заметно, если вы пробовали их обоих на своих собственных проектах. Вот несколько примеров...
допустим, вы раздували приложение, которое использовало момент пакет для анализа и отображения даты. Ваше приложение является планировщиком, поэтому ему действительно нужен этот пакет для запуска, как в:не может работать без него. В этом случае вы должны использовать
npm install moment --save
это создайте новое значение в пакете.в JSON
"dependencies": {
...
"moment": "^2.17.1"
}
когда вы разрабатываете, это действительно помогает использовать такие инструменты, как наборы тестов и может понадобиться Жасмин-основной и карма. В этом случае вы должны использовать
npm install jasmine-core --save-dev
npm install karma --save-dev
это также создаст новое значение в вашем пакете.в JSON
"devDependencies": {
...
"jasmine-core": "^2.5.2",
"karma": "^1.4.1",
}
ты не нужно набор тестов для запуска приложения в нормальном состоянии, так что это --save-dev
тип зависимости, ничего больше. Вы можете видеть как если вы не понимаете, что происходит на самом деле, это немного трудно представить.
взято непосредственно из npm docs docs#dependencies
зависимости
зависимости задаются в простом объекте, который отображает имя пакета в диапазон версий. Диапазон версий-это строка, которая имеет один или больше разделенных пробелами дескрипторов. Также можно определить зависимости с tarball или git URL.
пожалуйста, не ставьте тестовые жгуты или транспиляторы в зависимости объект. См. В разделе devDependencies ниже.
даже в документах он просит вас использовать --save-dev для модулей, таких как тестовые жгуты.
Я надеюсь, что это поможет и ясно.
по умолчанию NPM просто устанавливает пакет под node_modules. Когда вы пытаетесь установить зависимости для своего приложения/модуля, вам нужно сначала установить их, а затем добавить их в вашего package.json
.
--save-dev
добавляет сторонний пакет к зависимостям разработки пакета. Он не будет установлен, когда кто-то установит ваш пакет. Обычно он устанавливается только если кто-то клоны ваш исходный репозиторий и работает npm install
в нем.
--save
добавляет сторонний пакет к зависимостям пакета. Он будет установлен вместе с пакетом, когда кто-то работает npm install package
.
зависимости Dev-это те зависимости, которые необходимы только для разработки пакета. Это может включать тестовые бегуны, компиляторы, упаковщики и т. д.
Оба типа зависимостей хранятся в пакете . --save
добавляет dependencies
, --save-dev
добавляет devDependencies
установка npm документацию можно сослаться здесь.
как предложено @andreas-hultgren в ответ и по npm docs:
Если кто-то планирует загрузить и использовать ваш модуль в своей программе, то они, вероятно, не хотят или не должны загружать и создавать внешнюю среду тестирования или документации, которую вы используете.
однако для разработки webapp,старшина (инструмент лесов, который устанавливает рецензируемый, предварительно написанный пакет.файл json среди прочего) помещает все пакеты в devDependencies и ничего в зависимости, поэтому кажется, что использование --save-dev
является безопасной ставкой в webapp развитие, по крайней мере.
прекрасным примером этого является:
$ npm install typescript --save-dev
в этом случае вы хотели бы иметь Typescript (язык кодирования с возможностью синтаксического анализа javascript), доступный для разработки, но после развертывания приложения в нем больше нет необходимости, так как весь код был перенесен на javascript. Таким образом, нет смысла включать его в опубликованное приложение. Действительно, это займет только место и увеличит время загрузки.
--save-dev
сохраняет спецификацию semver в массив "devDependencies" в файле дескриптора пакета, --save
сохраняет его в "зависимости" вместо.
--save-dev использовано для модулей используемых в развитии применения,не требует пока бегущ его в окружающей среде продукции --save используется для добавления его в пакет.json и требуется для запуска приложения.
пример: express, body-parser, lodash, helmet, mysql все это используется при запуске приложения use --save для ввода зависимостей в то время как mocha,istanbul,chai,sonarqube-scanner все используются во время разработки ,поэтому поместите их в dev-зависимости .
npm link или npm install также установят модули dev-dependency вместе с модулями зависимостей в папке проекта
четкие ответы уже предусмотрены. Но стоит упомянуть, как devDependencies
влияет на установку пакетов:
по умолчанию npm install установит все модули, перечисленные как зависимости в пакете.формат JSON. С флагом --production (или когда переменная среды NODE_ENV установлена в production) npm не будет устанавливать модули, перечисленные в devDependencies .
вы обычно не хотите раздувать производственный пакет с вещами, которые вы собираетесь использовать только для целей разработки. Поэтому используйте опцию --save-dev (или-D) для разделения этих пакетов, таких как watchers(nodemon), unit test Framework(jest, jasmine, mocha, chai и т. д.так далее.)
любые другие пакеты библиотек, которые необходимы для работы вашего приложения, должны быть установлены с помощью --save (or-S)
npm install --save lodash //prod dependency
npm install -S moment // " "
npm install -S opentracing // " "
npm install -D jest //dev only dependency
npm install --save-dev typescript //dev only dependency
Если вы открываете пакет.JSON-файл, то вы увидите эти записи перечислены в двух разных разделах:
"dependencies": {
"lodash": "4.x",
"moment": "2.x",
"opentracing": "^0.14.1"
},
"devDependencies": {
"jest": "22.x",
"typescript": "^2.8.3"
},