Quelle est la différence entre npm install et npm run build?

113

Quelle est la différence entre npm installet npm run build?

J'ai remarqué dans mon projet que parfois npm commence à échouer lorsqu'il npm installest exécuté, mais, lors de l'exécution npm run build, cela fonctionne très bien.

En quoi le fonctionnement interne de ces deux cibles est-il installet run builddiffère-t-il?

BalajiK
la source
1
La réponse acceptée pour le moment est discutable. Je pense que les réponses de MKP et CTS_AE sont plus pertinentes pour le moment. Avec tout le respect que je vous dois, ceci devrait être notifié par le modérateur et / ou celui qui a posé cette question.
Suhas Chikkanna

Réponses:

70

npm installinstalle les dépendances dans le node_modules/répertoire, pour le projet de nœud sur lequel vous travaillez. Vous pouvez faire appel installà un autre projet node.js (module), pour l'installer en tant que dépendance de votre projet.

npm run buildest un alias pour npm build, et il ne fait rien sauf si vous spécifiez ce que fait "build" dans votre fichier package.json. Il vous permet d'effectuer toutes les tâches de construction / préparation nécessaires pour votre projet, avant qu'il ne soit utilisé dans un autre projet.

buildest appelé par les commandes linket install, selon la documentation de build :

Il s'agit de la commande de plomberie appelée par npm link et npm install.

Churro
la source
37
Downvoté car @MKP dit npm run buildet nenpm build sont pas les mêmes. Je voterai à nouveau si vous pouvez prouver qu'ils sont effectivement identiques ou corriger votre réponse.
Hendy Irawan
Après avoir évoqué la bonne réponse ci - dessous de lien, je pense aussi que npm buildet npm run buildne sont pas les mêmes. IMHO, Peut-être que la réponse ci-dessus de @churro doit être corrigée. S'il vous plait corrigez moi si je me trompe. stackoverflow.com/questions/29939697/…
Suhas Chikkanna
1
Malheureusement @HendyIrawan a raison et ce n'est pas la même commande, c'est une réponse hautement votée qui pourrait dérouter certaines personnes. Je pense qu'il doit être mis à jour.
rdarioduarte
79

NPM en 2019

npm buildn'existe plus. Vous devez appeler npm run buildmaintenant. Plus d'infos ci-dessous.

TLDR;

npm install: installe les dépendances, puis appelle le installdepuis le package.json scriptschamp.

npm run build: exécute le champ de construction à partir du package.json scriptschamp.


Champ Scripts NPM

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

Il y a beaucoup de choses que vous pouvez mettre dans le package.jsonchamp des scripts npm . Consultez le lien de documentation ci-dessus plus au-dessus du cycle de vie des scripts - la plupart ont des hooks pré et post que vous pouvez exécuter des scripts avant / après l'installation, la publication, la désinstallation, le test, le démarrage, l'arrêt, la réduction, la version.


Pour compliquer les choses

  • npm install n'est pas la même chose que npm run install
  • npm installinstalle les package.jsondépendances, puis exécute lepackage.json scripts.install
    • (Appelle essentiellement npm run installaprès l'installation des dépendances.
  • npm run installexécute uniquement le package.json scripts.install, il n'installera pas les dépendances .
  • npm buildC'était une commande valide (autrefois la même chose que npm run build) mais ce n'est plus le cas; c'est maintenant une commande interne. Si vous l'exécutez, vous obtiendrez: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Vous pouvez en savoir plus sur la documentation: https://docs.npmjs.com/cli/build
CTS_AE
la source
5
+1 Mais il est déroutant de dire npm buildqu'il n'existe plus. Il existe toujours dans le sens où il est connu / spécial pour npm, car il réagit avec l'avertissement que vous mentionnez en bas. Essentiellement, il ne fait rien maintenant. Cette réponse à une autre question a donné le résumé le plus court sur npm buildvs npm run build.
bluenote10
1
En d'autres termes, il est temps de vérifier le fil?
Moose on the Loose
44

La principale différence est:

npm install est une commande npm cli qui fait la chose prédéfinie, c'est-à-dire, comme écrit par Churro, pour installer les dépendances spécifiées dans package.json

npm run command-name ou npm run-script command-name ( ex. npm run build ) est également une commande cli prédéfinie pour exécuter vos scripts personnalisés avec le nom spécifié à la place de "command-name". Donc, dans ce cas, npm run build est une commande de script personnalisée avec le nom "build" et fera tout ce qui est spécifié à l'intérieur (par exemple echo 'hello world' donné dans l'exemple ci-dessous package.json).

Ponits à noter:

1) Encore une chose, npm buildet npm run builddeux choses différentes npm buildferont comme écrit par Churro, mais npm run buildferont un travail personnalisé écrit à l'intérieurpackage.json

2) Et npm buildet npm run buildne sont pas les mêmes. Ce que je veux dire, c'est que vous ne pouvez pas spécifier quelque chose dans le npm run buildscript build ( ) personnalisé et vous attendre npm buildà faire de même. Essayez la chose suivante à vérifier dans votre package.json:

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

et courir npm run buildet npm buildun par un et vous verrez la différence. Pour plus d'informations sur les commandes, veuillez suivre la documentation de npm .

À votre santé!!

MKP
la source
11
Plutôt que d '"essayer d'exécuter ceci", j'apprécierais que vous expliquiez plus en détail quelle est la différence entre npm run buildet npm build. Ok donc ils ne sont pas pareils, de quelle manière? La réponse de @ Churro est donc incorrecte?
Hendy Irawan
7
Ouais, ce qui npm buildfait reste un mystère. Ce serait bien de le savoir. Pour autant que je sache, " npm buildfera comme écrit par Churro" n'est pas vrai. Churro a dit qu'il ferait ce qui est spécifié dans package.jsonla buildcommande (comme défini dans la scriptssection je suppose). Mais c'est ce qui npm run buildfait et npm buildn'exécute pas la commande de construction spécifiée dans la package.json scriptssection. À moins qu'il n'y ait une autre façon de définir ce qu'il npm buildfaut faire dans le package.json, qui n'est pas expliqué ici, ni par Churro (ni dans la documentation NPM, je pense, malheureusement).
trollkotze
2
Alors je l'ai essayé et j'ai npm builddit que le build npm WARN était npm buildappelé sans argument. Voulez-vous dire npm run-script build? . Je pense que ça n'a rien fait. Après avoir passé du temps à lire toutes les réponses ici et à essayer cela moi-même, je ne peux toujours pas dire quel est le but de npm build:(.
bluenote10
4
  • npm install installe les dépendances dans votre configuration package.json.
  • npm run build exécute le script "build" et créé un script qui exécute votre application - disons server.js
  • npm start exécute le script "start" qui sera alors "node server.js"

Il est difficile de dire exactement quel était le problème, mais fondamentalement, si vous regardez la configuration de vos scripts, je suppose que "build" utilise une sorte d'outil de build pour créer votre application tandis que "start" suppose que la build a été faite mais échoue si le fichier n'est pas là.

Vous utilisez probablement bower ou grunt - il me semble que je me souviens qu'une application grunt typique aura défini ces scripts ainsi qu'un script "propre" pour supprimer la dernière version.

Les outils de construction ont tendance à créer un fichier dans un dossier bin /, dist / ou build / que le script de démarrage appelle ensuite - par exemple "node build / server.js". Lorsque votre npm startéchoue, c'est probablement parce que vous avez appelé npm cleanou similaire pour supprimer la dernière version afin que votre fichier d'application ne soit pas présent, ce qui entraîne l'échec de npm.

Le code source de npm build - pour aborder la discussion dans cette question - est dans github pour que vous puissiez le voir si vous le souhaitez. Si vous exécutez npm builddirectement et que vous avez défini un script "build", il se terminera avec une erreur vous demandant d'appeler votre script de build comme npm run-script buildsi ce n'était pas la même chose que npm run script.

Je ne suis pas tout à fait sûr de ce que npm buildfait, mais cela semble être lié aux scripts de post-installation et d'empaquetage dans les dépendances. Je suppose que cela peut garantir que tous les scripts de construction CLI ou bibliothèques natives requis par les dépendances sont construits pour l'environnement spécifique après le téléchargement du package. C'est pourquoi link et install appellent ce script.

Chanoch
la source