`npm build` no ejecuta el script llamado" build "en package.json


138

Para un nuevo módulo que estoy tratando de usar npm buildsin gulp / Grunt / otras herramientas de construcción especializadas.

"scripts": {
  "build": "node build.js"
},

Mi build.js es simplemente

console.log('Hello')

Sin embargo, corriendo

npm build

Simplemente sale sin imprimir nada, con un estado de 0.

Corriendo:

npm install

También hace todas las cosas normales, pero tampoco ejecuta build.js.

¿Cómo puedo hacer que npm ejecute mi script de compilación?

Editar: incluso los comandos bash simples no parecen funcionar, p. Ej.

"scripts": {
    "build": "touch TESTFILE"
},

No hace un archivo con ese nombre.


Solución alternativa: use installen su lugar.
Zaz

Esto es básicamente una molestia enorme y poco intuitiva de NPM y es una de las razones por las que sigo usando Yarn. Con yarn, puedo ejecutar cualquier script personalizado solo como un parámetro, es decir, yarn storybook ejecutará el script de storybook. En NPM tengo que hacer npm run storybook y además, si deseo pasar algún parámetro a través de npm, se requiere, antes de eso, así que cuando se compara el hilo storybook --ci con npm run storybook - --ci, es obvio para mí.
Emobe

Respuestas:


243

Lamentablemente, npm buildya es un comando interno , como se describe en los documentos :

Este es el comando de plomería llamado por npm link e npm install. Por lo general, no se debe llamar directamente.

Debido a que ese comando ya existe, siempre se oculta sobre tu "build": "node build.js".

La forma totalmente calificada de ejecutar su propio script es con run-scripto su aliasrun :

$ npm run build

npm starty otros son de forma abreviada, pero solo es una opción cuando un comando npm existente no lo sombrea, como lo npm buildhace.


Para la posteridad (como otros han mencionado) npm buildes usado por npm para construir complementos de Nodo C / C ++ nativos usando node-gyp . No está bien documentado porque generalmente ocurre automáticamente, pero si está interesado, el código fuente está aquí .


15
Entonces, ¿qué hace npm build ? Por lo que puedo ver, deja todos los archivos sin cambios ...
qntm

2
Algunos paquetes requieren un proceso de compilación. Cuando está ejecutando npm instally npm encuentra un paquete que tiene enlaces C / C ++ o generalmente algo que necesita node-gyp para ejecutarse, entonces comienza npm build. Puede reconstruir esos paquetes simplemente ejecutándose npm buildsolo.
Jakub Miziołek

44
el comando interno debe renombrarse _buildy npm builddebe ser un acceso directo como npm startynpm test
Pawel

1
Entiendo que npm buildno llamará a mi script, y que se usa para construir componentes compilados de un paquete. Todavía no estoy seguro de cómo se hace eso: ¿qué archivos busca, etc.?
aaaidan

1
Si tuviera que escribir un paquete yo mismo, aún sería bueno saber qué hacer para llenar npm buildde significado ...
Frank Nocke

20

El script nombrado como "build" package.jsonno es especial de ninguna manera. La única forma de ejecutarlo es llamando:

npm run-script build

Hay algunos nombres que npm llama automáticamente , pero "build" no es uno de ellos. La lista completa es:

  • prepublish` publish`postpublish
  • preinstall` install`postinstall
  • preuninstall` uninstall`postuninstall
  • preversion` version`postversion
  • pretest` test`posttest
  • prestop` stop`poststop
  • prestart` start`poststart
  • prerestart` restart`postrestart
  • preCUSTOMy postCUSTOMpara nombres de guiones personalizados.

4

OK, para ejecutar una compilación por sí mismo, use:

npm run-script build

3

Tuve un problema con npm run buildno imprimir nada. Terminé usando npm run build --verbosepara obtener la salida que necesitaba.


2

Npm build espera

Una carpeta que contiene un archivo package.json en su raíz

Intente usar scripts npm en su package.json, como el clásico npm start


Lo que esto significa es que npm build .debería funcionar y, en mi caso, npm ejecuta el script "build" en mi "package.json" como esperaba.
Erhhung
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.