Qual è la differenza tra npm install e npm run build?


113

Qual'è la differenza tra npm installe npm run build?

Ho notato nel mio progetto che a volte npm inizia a fallire quando npm installviene eseguito, ma, durante l'esecuzione npm run build, funziona perfettamente.

In che modo il funzionamento interno di questi due obiettivi è installe run builddifferisce?


1
La risposta accettata fin d'ora è discutibile. Penso che le risposte di MKP e CTS_AE siano più rilevanti in questo dato momento. Con il dovuto rispetto, questo dovrebbe avvenire sotto l'avviso del moderatore e / o di colui che ha posto questa domanda.
Suhas Chikkanna

Risposte:


70

npm installinstalla le dipendenze nella node_modules/directory, per il progetto del nodo su cui stai lavorando. Puoi chiamare installun altro progetto node.js (modulo), per installarlo come dipendenza per il tuo progetto.

npm run buildè un alias per npm build, e non fa nulla a meno che non specifichi cosa fa "build" nel tuo file package.json. Ti consente di eseguire tutte le attività di costruzione / preparazione necessarie per il tuo progetto, prima che venga utilizzato in un altro progetto.

buildè chiamato da linke install, secondo la documentazione per build :

Questo è il comando idraulico chiamato da npm link e npm install.


37
Downvoted poiché @MKP dice npm run builde nonnpm build sono la stessa cosa. Voterò di nuovo se puoi provare che sono davvero uguali o correggere la tua risposta.
Hendy Irawan

Dopo aver fatto riferimento alla risposta corretta del link sottostante, penso anche che npm builde npm run buildnon siano la stessa cosa. IMHO, forse la risposta sopra da @churro deve essere corretta. Perfavore, correggimi se sbaglio. stackoverflow.com/questions/29939697/...
Suhas chikkanna

1
Purtroppo @HendyIrawan ha ragione e non sono lo stesso comando, questa è una risposta molto votata che potrebbe confondere alcune persone. Credo che debba essere aggiornato.
rdarioduarte

79

NPM nel 2019

npm buildnon esiste più. Devi chiamare npm run buildadesso. Maggiori informazioni di seguito.

TLDR;

npm install: installa le dipendenze, quindi chiama il installdal package.json scriptscampo.

npm run build: esegue il campo di compilazione dal package.json scriptscampo.


Campo Script NPM

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

Ci sono molte cose che puoi inserire nel package.jsoncampo degli script npm . Controlla il collegamento alla documentazione sopra più sopra il ciclo di vita degli script: la maggior parte ha hook pre e post che puoi eseguire gli script prima / dopo l'installazione, la pubblicazione, la disinstallazione, il test, l'avvio, l'arresto, il wrapping, la versione.


Per complicare le cose

  • npm install non è lo stesso di npm run install
  • npm installinstalla le package.jsondipendenze, quindi esegue il filepackage.json scripts.install
    • (Essenzialmente chiamate npm run installdopo l'installazione delle dipendenze.
  • npm run installesegue solo il package.json scripts.install, non installerà le dipendenze .
  • npm buildera un comando valido (era uguale a npm run build) ma non lo è più; ora è un comando interno. Se lo esegui otterrai: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Puoi leggere di più sulla documentazione: https://docs.npmjs.com/cli/build

5
+1 Ma è fonte di confusione dire npm buildche non esiste più. Esce ancora nel senso che è noto / speciale a npm, perché reagisce con l'avviso che citi in fondo. In sostanza non fa nulla ora. Questa risposta a un'altra domanda ha dato la sintesi più breve sul npm buildvs npm run build.
bluenote10

1
In altre parole, è ora di controllare il filato?
Moose on the Loose

44

La differenza principale è:

npm install è un comando cli npm che fa la cosa predefinita, cioè, come scritto da Churro, per installare le dipendenze specificate all'interno di package.json

npm run nome-comando o npm run-script nome-comando ( es. npm run build ) è anche un comando cli predefinito per eseguire gli script personalizzati con il nome specificato al posto di "nome-comando". Quindi, in questo caso npm run build è un comando script personalizzato con il nome "build" e farà qualsiasi cosa specificata al suo interno (ad esempio echo 'hello world' dato nell'esempio package.json di seguito).

Da notare:

1) Un'altra cosa, npm builde npm run buildsono due cose diverse che npm buildfaranno come scritto da Churro, ma npm run buildfaranno lavori personalizzati scritti all'internopackage.json

2) E npm builde npm run buildnon sono la stessa cosa. Quello che voglio dire è che non puoi specificare qualcosa all'interno dello npm run buildscript build ( ) personalizzato e aspettarti npm builddi fare lo stesso. Prova la seguente cosa da verificare nel tuo package.json:

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

e corri npm run builde npm builduno per uno e vedrai la differenza. Per ulteriori informazioni sui comandi, seguire la documentazione di npm .

Saluti!!


11
Piuttosto che "provare a eseguire questo", ti sarei grato se spiegassi in modo più dettagliato qual è la differenza tra npm run builde npm build. Ok quindi non sono la stessa cosa, in che modo? Quindi la risposta di @ Churro non è corretta allora?
Hendy Irawan

7
Sì, ciò npm buildche rimane rimane un mistero. Sarebbe bello saperlo. Per quanto ne so, " npm buildfarà come scritto da Churro" non è vero. Churro ha detto di voler fare ciò che è specificato nel package.jsonper il buildcomando (come definito nella scriptssezione suppongo). Ma questo è ciò che npm run buildfa e npm buildnon esegue il comando build specificato nella package.json scriptssezione. A meno che non ci sia qualche altro modo per definire cosa npm builddovrebbe fare in package.json, che non è spiegato qui, né da Churro (né nei documenti di NPM, penso, tristemente).
trollkotze

2
Quindi l'ho provato e honpm build detto che npm WARN build npm buildchiamato senza argomenti. Volevi npm run-script build? . Penso che non abbia fatto nulla. Dopo aver passato del tempo a leggere tutte le risposte qui e averlo provato io stesso, non riesco ancora a dire qual è lo scopo di npm build:(.
bluenote10

4
  • npm install installa le dipendenze nella configurazione di package.json.
  • npm run build esegue lo script "build" e ha creato uno script che esegue la tua applicazione - diciamo server.js
  • npm start esegue lo script "start" che sarà quindi "node server.js"

È difficile dire esattamente quale fosse il problema ma fondamentalmente se guardi la configurazione degli script, immagino che "build" utilizzi un qualche tipo di strumento di build per creare la tua applicazione mentre "start" presume che la build sia stata completata ma poi fallisce se il file non è lì.

Probabilmente stai usando bower o grunt - mi sembra di ricordare che una tipica applicazione grunt avrà definito quegli script così come uno script "pulito" per cancellare l'ultima build.

Gli strumenti di compilazione tendono a creare un file in una cartella bin /, dist / o build / che lo script di avvio chiama quindi, ad esempio "node build / server.js". Quando npm startfallisci, probabilmente è perché hai chiamato npm cleano qualcosa di simile per eliminare l'ultima build in modo che il tuo file dell'applicazione non sia presente causando il fallimento dell'avvio di npm.

Il codice sorgente di npm build - per toccare la discussione in questa domanda - è in github perché tu possa dare un'occhiata se vuoi. Se esegui npm builddirettamente e hai definito uno script di "build", uscirà con un errore che ti chiede di chiamare il tuo script di build perché npm run-script buildquindi non è lo stesso di npm run script.

Non sono abbastanza sicuro di cosa npm buildfaccia, ma sembra essere correlato alla postinstallazione e agli script di pacchettizzazione nelle dipendenze. Presumo che questo potrebbe garantire che gli script di compilazione CLI o le librerie native richieste dalle dipendenze vengano compilati per l'ambiente specifico dopo aver scaricato il pacchetto. Questo sarà il motivo per cui il collegamento e l'installazione chiameranno questo script.

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.