¿Cuál es la diferencia entre npm install
y npm run build
?
He notado en mi proyecto que a veces npm comienza a fallar cuando se ejecuta npm install
, pero, al ejecutar npm run build
, funciona bien.
¿En qué se diferencian el funcionamiento interno de estos dos objetivos, es decir, install
y run build
?
npm install
instala las dependencias en el directorio node_modules/
, para el proyecto node en el que estás trabajando. Puedes llamar a install
en otro proyecto node.js (módulo), para instalarlo como dependencia de tu proyecto.
npm run build
es un alias de npm build
, y no hace nada a menos que especifiques lo que "build" hace en tu archivo package.json. Le permite realizar cualquier tarea de construcción/preparación necesaria para su proyecto, antes de que se utilice en otro proyecto.
build
es llamado por los comandos link
y install
, según la documentación de build:
Este es el comando de fontanería llamado por npm link y npm install.
La principal diferencia es::
npm install es un comando cli de npm que hace lo predefinido, es decir, como lo escribió Churro, instalar las dependencias especificadas dentro de package.json
npm run nombre-del-comando o npm run-script nombre-del-comando ( *ex.* npm run build ) es también un comando-cli predefinido para ejecutar tus scripts personalizados con el nombre especificado en lugar de "nombre-del-comando". Así, en este caso npm run build es un comando de script personalizado con el nombre "build" y hará cualquier cosa especificado dentro de él (por ejemplo **echo 'hola mundo' dado en el siguiente ejemplo package.json).
Ponits a tener en cuenta::
Una cosa más, npm build
y npm run build
son dos cosas diferentes npm build
hará como está escrito por Churro, pero npm run build
hará el trabajo personalizado escrito dentro de package.json
Y npm build
y npm run build
no son lo mismo. Lo que quiero decir es que no se puede especificar algo dentro del script de custom build (npm run build
) y esperar que npm build
haga lo mismo. Intenta verificar lo siguiente en tu package.json
:
{
"name": "demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build":"echo 'hello build'"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {},
"dependencies": {}
}
y ejecuta npm run build
y npm build
uno por uno y verás la diferencia. Para más información sobre los comandos por favor siga npm documentation.
¡¡¡Saludos!!!
npm install
instala las depedendencias en tu configuración package.json.npm start
ejecuta el script "start" que será "node server.js";Es difícil decir exactamente cuál es el problema, pero básicamente si usted mira su configuración de secuencias de comandos, supongo que "build" utiliza algún tipo de herramienta de construcción para crear su aplicación, mientras que "start" asume la construcción se ha hecho, pero luego falla si el archivo no está allí.
Probablemente estés usando bower o grunt - creo recordar que una aplicación típica de grunt habrá definido esos scripts así como un "clean" script para borrar la última construcción.
Las herramientas de compilación tienden a crear un archivo en una carpeta bin/, dist/, o build/ que el script de inicio luego llama - por ejemplo "node build/server.js". Cuando tu npm start
falla, es probablemente porque llamaste a npm clean
o algo similar para borrar la última compilación, por lo que tu archivo de aplicación no está presente causando que el npm start falle.
El código fuente de npm build's - para tocar la discusión en esta pregunta - está en github para que usted pueda echar un vistazo si lo desea. Si ejecuta npm build
directamente y tiene un "build" script definido, saldrá con un error pidiéndole que llame a su script de construcción como npm run-script build
por lo que no es lo mismo que npm run script
.
No estoy muy seguro de lo que hace npm build
, pero parece estar relacionado con la postinstalación y el empaquetado de scripts en las dependencias. Asumo que esto podría ser asegurarse de que cualquier scripts de construcción CLI's o bibliotecas nativas requeridas por las dependencias se construyen para el entorno específico después de descargar el paquete. Esta será la razón por la que link e install llaman a este script.