`npm build` non esegue lo script chiamato“ build ”in package.json


138

Per un nuovo modulo sto cercando di usare npm buildsenza gulp / Grunt / altri strumenti di costruzione specializzati.

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

Il mio build.js è semplicemente

console.log('Hello')

Tuttavia, in esecuzione

npm build

Esce semplicemente senza stampare nulla, con uno stato pari a 0.

In esecuzione:

npm install

Fa anche tutte le cose normali, ma non esegue neanche build.js.

Come posso fare in modo che npm esegua il mio script di build?

Modifica: anche i semplici comandi bash non sembrano funzionare, ad es

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

Non crea un file con quel nome.


Soluzione alternativa: utilizzare installinvece.
Zaz,

Questo è fondamentalmente un fastidio enorme e non intuitivo di NPM ed è uno dei motivi per cui continuo a usare Yarn. Con il thread, posso eseguire qualsiasi script personalizzato proprio come un parametro, ad esempio il libro di fiabe del thread eseguirà lo script del libro di fiabe. In NPM devo fare lo storybook di npm run e per di più, se voglio passare qualsiasi parametro attraverso npm, richiede - prima di ciò, quindi quando si confronta il storybook di filati --ci con lo storybook di npm run - --ci, è un gioco da ragazzi per me.
Emobe

Risposte:


243

Purtroppo npm buildè già un comando interno , come descritto nei documenti :

Questo è il comando idraulico chiamato da npm link e npm install. In genere non dovrebbe essere chiamato direttamente.

Poiché quel comando esiste già, ombreggia sempre sul tuo "build": "node build.js".

Il modo completo per eseguire il tuo script è con run-scripto aliasrun :

$ npm run build

npm starte altri sono la scorciatoia, ma è solo un'opzione quando un comando npm esistente non lo ombreggia, come npm buildfa.


Per i posteri (come altri hanno già detto) npm buildè usato da npm per costruire addon di nodi C / C ++ nativi usando node-gyp . Non è ben documentato perché di solito accade automaticamente, ma se sei interessato il codice sorgente è qui .


15
Quindi cosa fa npm build ? Per quanto posso vedere lascia tutti i file completamente invariati ...
qntm

2
Alcuni pacchetti richiedono un processo di compilazione. Quando sei in esecuzione npm installe npm trova un pacchetto che ha i collegamenti C / C ++ o generalmente sth che ha bisogno di node-gyp per funzionare, allora si avvia npm build. Puoi ricostruire quei pacchetti semplicemente correndo npm buildda solo.
Jakub Miziołek,

4
il comando interno dovrebbe essere rinominato _builde npm builddovrebbe essere una scorciatoia come npm startenpm test
Pawel il

1
Capisco che npm buildnon chiamerà il mio script e che viene utilizzato per creare componenti compilati di un pacchetto. Non sono ancora sicuro di come procede: quali file cerca, ecc.?
aaaidan,

1
Se dovessi scrivere un pacchetto da solo, sarebbe comunque bello sapere cosa fare per riempire npm builddi significato ...
Frank Nocke,

20

Lo script chiamato "build" package.jsonnon è speciale in alcun modo. L'unico modo per farlo funzionare è chiamare:

npm run-script build

Ci sono alcuni nomi che vengono chiamati automaticamente da npm , ma "build" non è uno di questi. L'elenco completo è:

  • prepublish, publish,postpublish
  • preinstall, install,postinstall
  • preuninstall, uninstall,postuninstall
  • preversion, version,postversion
  • pretest, test,posttest
  • prestop, stop,poststop
  • prestart, start,poststart
  • prerestart, restart,postrestart
  • preCUSTOMe postCUSTOMper nomi di script personalizzati.

4

OK, per eseguire una build da solo, utilizzare:

npm run-script build

3

Ho avuto un problema con npm run buildnon stampa nulla. finito per usare npm run build --verbosel'output di cui avevo bisogno.


2

Npm build si aspetta

Una cartella contenente un file package.json nella sua radice

Prova a usare gli script npm nel tuo package.json, come il classico npm start


Ciò significa che npm build .dovrebbe funzionare e, nel mio caso, npm esegue lo script "build" nel mio "package.json" come speravo.
Erhhung,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.