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


в чем разница между:

npm install [package_name] --save

и

npm install [package_name] --save-dev

Что это значит?

9 438

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

зависимости

зависимости задаются в простом объекте, который сопоставляет имя пакета к диапазону версий. Диапазон версий-это строка, которая имеет один или больше разделенных пробелом дескрипторов. Зависимости также могут быть определены с тарболом или 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 install документация может быть упомянут здесь.

как предложил @andreas-hultgren in ответ и по npm docs:

Если кто-то планирует загрузить и использовать ваш модуль в своей программе, то им, вероятно, не нужно или не нужно загружать и создавать внешнюю среду тестирования или документации, которую вы используете.

однако, для разработки веб-приложений,старшина (инструмент строительных лесов, который устанавливает рецензируемый, предварительно написанный пакет.файл json среди прочего) помещает все пакеты в devDependencies и ничего в зависимости, поэтому кажется, что использование --save-dev это безопасная ставка в webapp развитие, по крайней мере.

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

$ npm install typescript --save-dev

в этом случае вы хотели бы иметь Typescript (язык кодирования с возможностью синтаксического анализа javascript), доступный для разработки, но после развертывания приложения это больше не нужно, так как весь код был перенесен на javascript. Таким образом, не имеет смысла включать его в опубликованное приложение. Действительно, это займет только место и увеличит время загрузки.

--save-dev сохраняет спецификацию semver в массив "devDependencies" в файле дескриптора пакета, --save сохраняет его в "зависимости" вместо.

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

пример: выразить,тело-парсер,лодашь,шлем,MySQL и все они используются во время выполнения приложения использовать-сохранить, чтобы положить в зависимости, в то время как мокко,Стамбул,чай,sonarqube-сканер всего используются во время разработки ,так что положить эти в 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"
},