Qual é a diferença entre ... salvar e ... salvar-dev?

Qual é a diferença entre:

MPN install [package_name] -- save

e

MPN install [package_name] --save-dev

O que significa isto?

Author: Omar Hussein, 2014-04-06

9 answers

  • --save-dev é usado para gravar o pacote para fins de desenvolvimento. Exemplo: testes unitários, minificação..
  • --save é usado para gravar o pacote necessário para a aplicação executar.
 346
Author: Tuong Le, 2015-07-11 15:56:48

A diferença entre --save e --save-dev pode não ser imediatamente perceptível se tiver experimentado ambos nos seus próprios projectos. Eis alguns exemplos...

Digamos que estava a acumular uma aplicação que usava o momento pacote para analisar e mostrar as datas. O seu aplicativo é um scheduler, por isso precisa mesmo que este pacote seja executado, como em: não pode ser executado sem ele. Neste caso, usaria
npm install moment --save
Isso criaria um novo valor no seu pacote.json
"dependencies": {
   ...
   "moment": "^2.17.1"
}

Quando se está a desenvolver, ajuda muito usar ferramentas como suites de teste e pode precisar dejasmine-core ekarma . Neste caso, usaria

npm install jasmine-core --save-dev
npm install karma --save-dev
Isso também criaria um novo valor no seu pacote.json
"devDependencies": {
    ...
    "jasmine-core": "^2.5.2",
    "karma": "^1.4.1",
}

Você não precisado conjunto de testes para executar a aplicação no seu estado normal, por isso é uma dependência do tipo --save-dev, nada mais. Você pode ver como se você não entende o que está realmente acontecendo, é um pouco difícil de imaginar.

Retirado directamente dos docs NPM docs#dependências

Dependências

As dependências são especificadas num objecto simples que mapeia um nome de pacote para uma gama de versões. O intervalo de versões é um texto que tem um ou mais descritores separados por espaços. As dependências também podem ser identificadas com uma URL tarball ou git.

Por Favor, não coloque arneses de teste ou transpilers em suas dependências objecto. Ver dependências , abaixo.

Mesmo nos documentos, ele pede-lhe para usar --save-dev para módulos como arneses de teste.

Espero que isto ajude e seja claro.
 346
Author: Michael Bruce, 2017-03-02 21:25:15

Por omissão, o MPN instala simplesmente um pacote sob o código node_ modules. Quando estiver a tentar instalar dependências para o seu aplicativo/módulo, terá de as instalar primeiro e depois adicioná-las à secção dependencies do seu package.json.

--save-dev adiciona o pacote de terceiros às dependências de desenvolvimento do pacote. Não será instalado quando alguém instalar o seu pacote. Normalmente só é instalado se alguém clones o seu repositório de origem e correr npm install em ele.

--save adiciona o pacote de terceiros às dependências do pacote. Ele será instalado junto com o pacote sempre que alguém executar npm install package.

Dependências Dev são aquelas dependências que só são necessárias para desenvolver o pacote. Isso pode incluir corredores de teste, Compiladores, empacotadores, etc. Ambos os tipos de dependências são armazenados no Arquivo package.json do pacote. --save adiciona dependencies, --save-dev adiciona a devDependencies

A documentação do Npm install pode ser encaminhada aqui.

 50
Author: Lakshmi Swetha G, 2017-02-15 11:17:09

Como sugerido por @andreas-hultgren em esta resposta e de acordo com os documentos da MPN:

Se alguém está a planear fazer o download e usar o seu módulo no seu programa, então provavelmente não quer ou precisa de fazer o download e construir a estrutura de teste ou documentação externa que utiliza.

No entanto, para o desenvolvimento do webapp, Yeoman (uma ferramenta de andaimes que instala um pacote pré-escrito revisto por pares.ficheiro json entre outros coisas) coloca todos os pacotes em dependências e nada em dependências, então parece que o uso de --save-dev é uma aposta segura no desenvolvimento de webapp, pelo menos.

 31
Author: wayfarer_boy, 2017-05-23 12:10:28

Um exemplo perfeito disto é:

$ npm install typescript --save-dev

Neste caso, você gostaria de ter Typescript (uma linguagem de codificação JavaScript-processável) disponível para o desenvolvimento, mas uma vez que o aplicativo é implantado, não é mais necessário, já que todo o código foi transposto para javascript. Como tal, não faria sentido incluí-lo na aplicação publicada. Na verdade, só ocuparia espaço e aumentaria os tempos de download.

 29
Author: Jackalope, 2017-06-30 16:13:11

--save-dev grava o spec de semver na lista de "dependências" no seu ficheiro descritor do pacote, --save grava-o em "dependências" em vez disso.

 16
Author: alex, 2014-04-06 08:07:21

--o save-dev é utilizado para módulos utilizados no desenvolvimento da aplicação,não sendo necessário executá-lo no meio da produção. -- save é usado para adicionar no Pacote.json e é necessário para a execução da aplicação.

Exemplo: express,body-parser, lodash, helmet, mysql todos estes são usados durante a execução do uso da aplicação -- save para colocar em dependências enquanto mocha, Istambul, chai, sonarqube-scanner todos são usados durante o desenvolvimento, então coloque aqueles em dependências-dev .

A ligação do MPN ou a instalação do MPN Irão também instalar os módulos de dependência do dev, juntamente com os módulos de dependência na sua pasta do projecto

 4
Author: BittuS, 2017-11-28 08:30:12

Já foram fornecidas respostas claras. Mas vale a pena mencionar como {[[0]} afeta a instalação de pacotes:

Por omissão, o npm install irá instalar todos os módulos listados como dependências no Pacote.json . Com a opção -- production flag (ou quando a variável de ambiente NODE_ env estiver configurada para produção ), o MPN não irá instalar módulos listados nas dependências do dev .

Ver: https://docs.npmjs.com/cli/install

 3
Author: Alireza, 2018-08-13 03:25:58

Você geralmente não quer inchar pacote de produção com coisas que você só pretende usar para fins de desenvolvimento. Então use a opção --save-dev (ou-D) para separar esses pacotes, tais como watchers(nodemon), unit test frameworks(jest, jasmine, mocha, chai etc.etc.)

Quaisquer outros pacotes de bibliotecas que sejam necessários para que a sua aplicação funcione precisam de ser instalados usando --save (ou-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

Se abrir a embalagem.JSON file então você verá estes itens listados em dois diferentes secções:

"dependencies": {
  "lodash": "4.x",
  "moment": "2.x",
  "opentracing": "^0.14.1"
},

"devDependencies": {
    "jest": "22.x",
    "typescript": "^2.8.3"
},
 1
Author: velhala, 2018-07-22 19:38:47