В чем разница между --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 .

см.:https://docs.npmjs.com/cli/install


вы обычно не хотите раздувать производственный пакет с вещами, которые вы собираетесь использовать только для целей разработки. Поэтому используйте опцию --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"
},