Qual é a diferença entre npm install e npm run build?


113

Qual é a diferença entre npm installe npm run build?

Percebi em meu projeto que às vezes o npm começa a falhar quando npm installé executado, mas, ao ser executado npm run build, funciona perfeitamente.

Como o funcionamento interno desses dois alvos é específico installe run builddifere?


1
A resposta aceita a partir de agora é discutível. Acho que as respostas de MKP e CTS_AE, são mais relevantes neste momento. Com o devido respeito, isto deve vir sob a notificação do moderador e / ou daquele que fez esta pergunta.
Suhas Chikkanna

Respostas:


69

npm installinstala dependências no node_modules/diretório, para o projeto de nó em que você está trabalhando. Você pode chamar installoutro projeto node.js (módulo), para instalá-lo como uma dependência para seu projeto.

npm run buildé um alias para npm builde não faz nada a menos que você especifique o que "build" faz em seu arquivo package.json. Ele permite que você execute quaisquer tarefas de construção / preparação necessárias para o seu projeto, antes de ser usado em outro projeto.

buildé chamado pelos comandos linke install, de acordo com a documentação do build :

Este é o comando de encanamento chamado por npm link e npm install.


37
Votos negados uma vez que @MKP diz npm run builde nãonpm build são os mesmos. Eu irei votar a favor novamente se você puder provar que eles são realmente iguais ou corrigir sua resposta.
Hendy Irawan

Após referir a resposta correta do link abaixo, também acho que npm builde npm run buildnão são os mesmos. IMHO, Talvez a resposta acima de @churro precise ser corrigida. Por favor corrija-me se eu estiver errado. stackoverflow.com/questions/29939697/…
Suhas Chikkanna

1
Infelizmente @HendyIrawan está certo e eles não são o mesmo comando, esta é uma resposta bem votada que pode confundir algumas pessoas. Eu acredito que deve ser atualizado.
rdarioduarte

79

NPM em 2019

npm buildnão existe mais. Você deve ligar npm run buildagora. Mais informações abaixo.

TLDR;

npm install: instala dependências e chama o installdo package.json scriptscampo.

npm run build: executa o campo de construção a partir do package.json scriptscampo.


Campo de Scripts NPM

https://docs.npmjs.com/misc/scripts

Há muitas coisas que você pode colocar no package.jsoncampo de scripts npm . Confira o link de documentação acima mais acima do ciclo de vida dos scripts - a maioria tem pré e pós ganchos que você pode executar scripts antes / depois de instalar, publicar, desinstalar, testar, iniciar, parar, encolher, versão.


Para complicar as coisas

  • npm install não é o mesmo que npm run install
  • npm installinstala package.jsondependências e, em seguida, executa opackage.json scripts.install
    • (Basicamente, chama npm run installdepois que as dependências são instaladas.
  • npm run installexecuta apenas o package.json scripts.install, não instalará dependências .
  • npm buildcostumava ser um comando válido (costumava ser o mesmo que npm run build), mas não é mais; agora é um comando interno. Se você executá-lo, obterá: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Você pode ler mais na documentação: https://docs.npmjs.com/cli/build

5
+1 Mas é confuso dizer npm buildque não existe mais. Ele ainda existe no sentido de que é conhecido / especial para o npm, pois reage com o aviso que você mencionou no final. Essencialmente, não faz nada agora. Essa resposta a outra pergunta deu o menor resumo do npm buildv npm run build.
bluenote10

1
Em outras palavras, é hora de verificar o fio?
Moose on the Loose

44

A principal diferença é:

npm install é um comando npm cli que faz a coisa predefinida, ou seja, conforme escrito por Churro, para instalar dependências especificadas em package.json

npm run command-name ou npm run-script command-name ( ex. npm run build ) também é um comando cli predefinido para executar seus scripts personalizados com o nome especificado no lugar de "command-name". Portanto, neste caso, npm run build é um comando de script personalizado com o nome "build" e fará qualquer coisa especificada dentro dele (por exemplo echo 'hello world' fornecido no exemplo abaixo package.json).

Ponits a serem observados:

1) Mais uma coisa, npm builde npm run buildduas coisas diferentes npm buildfarão conforme escrito por Churro, mas npm run buildfarão um trabalho personalizado escrito por dentropackage.json

2) E npm builde npm run buildnão são iguais. O que quero dizer é que você não pode especificar algo dentro do npm run buildscript build ( ) customizado e esperar npm buildfazer o mesmo. Tente o seguinte para verificar em seu package.json:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build":"echo 'hello build'"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

e correr npm run builde npm buildum por um e você vai ver a diferença. Para mais informações sobre comandos, siga a documentação do npm .

Felicidades!!


11
Em vez de "tentar executar isso", gostaria que explicasse com mais detalhes qual é a diferença entre npm run builde npm build. Ok, então eles não são iguais, de que maneira? Então a resposta de @ Churro está incorreta?
Hendy Irawan

7
Sim, o npm buildque permanece permanece um mistério. Seria bom saber disso. Pelo que eu posso dizer, " npm buildfarei conforme escrito por Churro" não é verdade. Churro disse que faria o que está especificado package.jsonpara o buildcomando (conforme definido na scriptsseção, suponho). Mas é isso que npm run buildfaz, e npm buildnão executa o comando build especificado na package.json scriptsseção. A menos que haja alguma outra maneira de definir o que npm builddeve ser feito no package.json, o que não é explicado aqui, nem por Churro (nem nos documentos do NPM, eu acho, infelizmente).
trollkotze

2
Então eu tentei e npm builddisse npm WARN build npm buildchamado sem argumentos. Você quis npm run-script build? . Acho que não fez nada. Depois de passar um tempo lendo todas as respostas aqui e tentando fazer isso sozinho, ainda não consigo dizer qual é o propósito de npm build:(.
bluenote10

4
  • npm install instala as dependências em sua configuração package.json.
  • npm run build executa o script "build" e cria um script que executa seu aplicativo - digamos server.js
  • npm start executa o script "start" que será "node server.js"

É difícil dizer exatamente qual era o problema, mas basicamente se você olhar para a configuração de seus scripts, eu acho que "build" usa algum tipo de ferramenta de construção para criar seu aplicativo, enquanto "start" assume que a construção foi feita, mas falha se o arquivo não está lá.

Você provavelmente está usando o bower ou o grunt - pareço lembrar que um aplicativo grunt típico terá definido esses scripts, bem como um script "limpo" para excluir a última compilação.

As ferramentas de construção tendem a criar um arquivo em uma pasta bin /, dist / ou build / que o script de início chama - por exemplo, "node build / server.js". Quando o seu npm startfalha, provavelmente é porque você chamou npm cleanou algo semelhante para excluir a compilação mais recente, de forma que o arquivo do aplicativo não esteja presente, causando a falha do npm.

O código-fonte do npm build - para tocar na discussão desta questão - está no github para você dar uma olhada, se desejar. Se você executar npm builddiretamente e tiver um script de "construção" definido, ele sairá com um erro solicitando que você chame seu script de construção, npm run-script buildpois não é o mesmo quenpm run script .

Não tenho certeza do que npm buildsignifica, mas parece estar relacionado a scripts de pós-instalação e empacotamento em dependências. Presumo que isso pode ser feito para garantir que quaisquer scripts de compilação CLI ou bibliotecas nativas exigidas pelas dependências sejam construídas para o ambiente específico após o download do pacote. É por isso que o link e a instalação chamam esse script.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.