¿Cuál es la diferencia entre npm install y npm run build?

113

¿Cuál es la diferencia entre npm instally npm run build?

He notado en mi proyecto que a veces npm comienza a fallar cuando npm installse realiza, pero, al ejecutarse npm run build, funciona bien.

¿Cómo funciona el funcionamiento interno de estos dos objetivos a saber instally run buildser diferente?

BalajiK
fuente
1
La respuesta aceptada a partir de ahora es discutible. Creo que las respuestas de MKP y CTS_AE son más relevantes en este momento. Con el debido respeto, esto debe ser notificado por el moderador y / o quien hizo esta pregunta.
Suhas Chikkanna

Respuestas:

69

npm installinstala las dependencias en el node_modules/directorio, para el proyecto de nodo en el que está trabajando. Puede llamar installa otro proyecto (módulo) de node.js para instalarlo como una dependencia para su proyecto.

npm run buildes un alias de npm build, y no hace nada a menos que especifique lo que hace "build" en su archivo package.json. Le permite realizar cualquier tarea de preparación / construcción necesaria para su proyecto, antes de que se utilice en otro proyecto.

buildes llamado por linky installcomandos, de acuerdo con la documentación para construir :

Este es el comando de plomería llamado por npm link y npm install.

Churro
fuente
37
Downvoted ya que @MKP dice npm run buildy nonpm build son lo mismo. Volveré a votar si puedes demostrar que son iguales o corregir tu respuesta.
Hendy Irawan
Después de consultar la respuesta correcta del siguiente enlace, también creo que npm buildy npm run buildno son lo mismo. En mi humilde opinión, tal vez la respuesta anterior de @churro deba corregirse. Por favor, corríjame si estoy equivocado. stackoverflow.com/questions/29939697/…
Suhas Chikkanna
1
Desafortunadamente, @HendyIrawan tiene razón y no son el mismo comando, esta es una respuesta muy votada que podría confundir a algunas personas. Creo que debe actualizarse.
rdarioduarte
79

NPM en 2019

npm buildya no existe. Debes llamar npm run buildahora. Más información a continuación.

TLDR;

npm install: instala las dependencias, luego llama al installdesde el package.json scriptscampo.

npm run build: ejecuta el campo de construcción desde el package.json scriptscampo.


Campo de secuencias de comandos de NPM

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

Hay muchas cosas que puede poner en el package.jsoncampo de scripts npm . Consulte el enlace de documentación anterior más arriba del ciclo de vida de los scripts; la mayoría tiene enlaces previos y posteriores que puede ejecutar scripts antes / después de la instalación, publicación, desinstalación, prueba, inicio, detención, empaquetado, versión.


Para complicar las cosas

  • npm install no es lo mismo que npm run install
  • npm installinstala las package.jsondependencias, luego ejecuta elpackage.json scripts.install
    • (Básicamente, llamadas npm run installdespués de que se instalen las dependencias.
  • npm run installsolo ejecuta el package.json scripts.install, no instalará dependencias .
  • npm buildsolía ser un comando válido (solía ser el mismo que npm run build) pero ya no lo es; ahora es un comando interno. Si lo ejecuta, obtendrá: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Puede leer más en la documentación: https://docs.npmjs.com/cli/build
CTS_AE
fuente
5
+1 Pero es confuso decir que npm buildya no existe. Todavía existe en el sentido de que es conocido / especial para npm, porque reacciona con la advertencia que menciona en la parte inferior. Esencialmente, ahora no hace nada. Esta respuesta a otra pregunta dio el resumen más corto en la npm buildfrente npm run build.
bluenote10
1
En otras palabras, ¿es hora de revisar el hilo?
Moose on the Loose
44

La principal diferencia es:

npm install es un comando npm cli que hace lo predefinido, es decir, como está escrito por Churro, para instalar las dependencias especificadas dentro de package.json

npm run command-name o npm run-script command-name (por ejemplo, npm run build ) también es un comando cli predefinido para ejecutar sus scripts personalizados con el nombre especificado en lugar de "command-name". Entonces, en este caso, npm run build es un comando de script personalizado con el nombre "build" y hará cualquier cosa que se especifique dentro de él (por ejemplo, echo 'hello world' dado en el siguiente ejemplo package.json).

Ponits a tener en cuenta:

1) Una cosa más, npm buildy npm run buildhay dos cosas diferentes que npm buildharán según lo escrito por Churro, pero npm run buildharán un trabajo personalizado escrito dentropackage.json

2) Y npm build, y npm run buildno son los mismos. Lo que quiero decir es que no puede especificar algo dentro del npm run buildscript build ( ) personalizado y esperar npm buildhacer lo mismo. Intente lo siguiente para verificar en su package.json:

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

y corre npm run buildy npm builduno a uno y verás la diferencia. Para obtener más información sobre los comandos, siga la documentación de npm .

¡¡Salud!!

MKP
fuente
11
En lugar de "intentar ejecutar esto", le agradecería que me explicara con más detalle cuál es la diferencia entre npm run buildy npm build. Ok, entonces no son iguales, ¿de qué manera? Entonces, ¿la respuesta de @ Churro es incorrecta?
Hendy Irawan
7
Sí, lo npm buildque sigue siendo un misterio. Sería bueno saber eso. Por lo que yo sé, " npm buildharé lo que escribió Churro" no es cierto. Churro dijo que haría lo que se especifica en package.jsonel buildcomando (como se define en la scriptssección, supongo). Pero eso es lo que npm run buildhace y npm buildno ejecuta el comando de compilación especificado en la package.json scriptssección. A menos que haya alguna otra forma de definir lo que se npm builddebe hacer en elpackage.json , que no se explica aquí, ni por Churro (ni en los documentos del NPM, creo, tristemente).
trollkotze
2
Así que lo probé y npm builddije que npm WARN build npm buildllamó sin argumentos. ¿Querías hacerlo npm run-script build? . Creo que no hizo nada. Después de pasar tiempo para leer todas las respuestas aquí y probar esto yo mismo, todavía no puedo decir cuál es el propósito de npm build:(.
bluenote10
4
  • npm install instala las dependencias en su configuración package.json.
  • npm run build ejecuta el script "build" y creó un script que ejecuta su aplicación, digamos server.js
  • npm start ejecuta el script "start" que luego será "node server.js"

Es difícil saber exactamente cuál fue el problema, pero básicamente si observa la configuración de sus scripts, supongo que "compilar" usa algún tipo de herramienta de compilación para crear su aplicación, mientras que "iniciar" asume que la compilación se ha realizado, pero luego falla si el archivo no está ahí.

Probablemente esté usando bower o gruñido; creo recordar que una aplicación típica de gruñido habrá definido esos scripts así como un script "limpio" para eliminar la última compilación.

Las herramientas de compilación tienden a crear un archivo en una carpeta bin /, dist / o build / que luego llama el script de inicio, por ejemplo, "node build / server.js". Cuando npm startfalla, probablemente se deba a que llamó npm cleano similar para eliminar la última compilación, por lo que el archivo de su aplicación no está presente, lo que hace que npm comience a fallar.

El código fuente de npm build, para abordar la discusión en esta pregunta, está en github para que lo vea si lo desea. Si tu corresnpm build directamente y tiene un script de "compilación" definido, se cerrará con un error pidiéndole que llame a su script de compilación npm run-script buildpara que no sea lo mismo que npm run script.

No estoy muy seguro de qué npm buildes lo que hace, pero parece estar relacionado con los scripts postinstall y empaquetados en dependencias. Supongo que esto podría garantizar que los scripts de compilación de CLI o las bibliotecas nativas requeridas por las dependencias se compilen para el entorno específico después de descargar el paquete. Esta será la razón por la que el enlace y la instalación llaman a este script.

Chanoch
fuente