npm install vs. update - qual a diferença?

520

Qual é a diferença prática entre npm installe npm update? Quando devo usar qual?

Borek Bernard
fonte

Respostas:

655

A diferença entre o npm install e o npm update de manipulação das versões de pacote especificadas em package.json :

{
  "name":          "my-project",
  "version":       "1.0",                             // install   update
  "dependencies":  {                                  // ------------------
    "already-installed-versionless-module":  "*",     // ignores   "1.0" -> "1.1"
    "already-installed-semver-module":       "^1.4.3" // ignores   "1.4.3" -> "1.5.2"
    "already-installed-versioned-module":    "3.4.1"  // ignores   ignores
    "not-yet-installed-versionless-module":  "*",     // installs  installs
    "not-yet-installed-semver-module":       "^4.2.1" // installs  installs
    "not-yet-installed-versioned-module":    "2.7.8"  // installs  installs
  }
}

Resumo : A única grande diferença é que um módulo já instalado com versão difusa ...

  • é ignorado por npm install
  • é atualizado por npm update

Além disso : installe updatepor padrão lida com devDependencies de maneira diferente

  • npm installvai instalar / atualizar devDependencies a menos que --productiona bandeira é adicionada
  • npm updateirá ignorar devDependencies, a menos que o --devsinalizador seja adicionado

Por que usar npm install?

Porque npm installfaz mais quando você olha além de lidar com suas dependências package.json. Como você pode ver no npm install, você pode ...

  • instalar manualmente módulos de nó
  • defini-los como globais (o que os coloca no shell PATH) usandonpm install -g <name>
  • instalar determinadas versões descritas pelas tags git
  • instalar a partir de um URL git
  • forçar uma reinstalação com --force
xanderiel
fonte
20
e sobre o quê ~1.3?
Offirmo 27/02
6
e se a versão for como ^ 5.0.9? E é possível npm install --save somePackagesalvar o * nas dependências?
KwiZ
5
Eu também observaria que scripts como postinstallrodam na instalação, mas não na atualização.
Michael Marvick
2
Se installe updatefuncionar de forma diferente em URLs git, tags git etc. especificadas no package.json, seria ótimo adicionar esses casos ao exemplo.
joeytwiddle
2
@Offirmo, o til no versionamento difuso significa "atualizar para a versão menor (bugfix) menor mais recente deste pacote", a versão secundária sendo o último número da versão, isto 1.3.0 -> 1.3.1é, semelhante ao local ^1.3.0onde a ^versão principal é atualizada 1.3.0 -> 1.4.0.
Boyan Kushlev
82

O npm install instala todos os módulos listados no package.jsonarquivo e suas dependências.

O npm update atualiza todos os pacotes no node_modulesdiretório e suas dependências.

O npm install express instala apenas o módulo express e suas dependências.

módulo npm update express updates express (começando com [email protected], ele não atualiza suas dependências).

Portanto, as atualizações são para quando você já possui o módulo e deseja obter a nova versão.

erva
fonte
5
se você não especificar uma versão específica em um arquivo package.json, o npm install obterá a versão mais recente de um módulo. Então isso é uma espécie de atualização.
saeed
11
Então, o que devo usar npm installou npm update? Ou, em outras palavras, agora estou usando npm installe parece fazer a atualização também. Existe algum motivo para usar npm update?
Borek Bernard
4
Portanto update, sempre será atualizada para a versão mais recente, independentemente do pacote.json, enquanto installrespeitará a versão fornecida no pacote.json?
Borek Bernard
1
updateinstala (ou atualiza para) a versão mais recente do módulo. installinstala a versão mais recente do módulo, caso não seja apresentada, mantém a versão atual.
Tenphi 13/03/14
11
O @Borek npm updateserá atualizado para a versão mais recente com base no seu package.json, não importando isso. Se você tiver "express": "3.x" e estiver na versão 3.1.0, ele será atualizado para a tag 3.x mais recente. Se houver uma versão 4.x, ela não instalará a versão mais recente.
Gcochard 9/04
47

Na maioria dos casos, isso instalará a versão mais recente do módulo publicada no npm.

npm install express --save

ou melhor, para atualizar o módulo para a versão mais recente, use:

npm install express@latest --save --force

--save: O pacote aparecerá nas suas dependências.

Mais informações: npm-install

jmav
fonte
11
npm install express@latest --save --forceera exatamente o que eu queria.
21414 ThomasReggi
2
Na maioria dos casos? Algum outro caso?
Dmitri Zaitsev
9

Muitas distinções já foram mencionadas. Aqui está mais um:

Correndo npm installna parte superior do seu diretório de origem será executado vários scripts: prepublish, preinstall, install, postinstall. Dependendo do que esses scripts fazem, um npm installpode fazer muito mais trabalho do que apenas instalar dependências.

Acabei de ter um caso de uso em prepublishque chamaria makee o Makefilefoi projetado para buscar dependências se a package.jsonatualização for atualizada. A chamada npm installde dentro do Makefilecomando levaria a uma recursão infinita, enquanto a chamada npm updatefuncionava perfeitamente, instalando todas as dependências para que a compilação pudesse prosseguir mesmo que makefosse chamada diretamente.

MvG
fonte
1
Uma implicação é que, se você atualizou, por exemplo, seu redismódulo e other_modulerequer uma versão mais antiga redis, npm install other_modulegarantirá other_moduleo uso da versão mais antiga. Pode adicionar other_module/node_modules/redisse necessário.
Jlukanta #
4

npm update: instale e atualize com os módulos de nó mais recentes que estão no package.json

npm install: instale os módulos do nó definidos em package.json (sem atualização)

DSK
fonte
Usando o npm versão 6.9.0, observo o seguinte comportamento: npm updateomitirá um grande número de dependências no package-lock.json. Para ter todos os pacotes necessários disponíveis e package-lock.jsonestar correto, eu sempre tenho que executar npm installlogo depois npm update.
Manfred