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.