224 votes

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

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

J'ai remarqué dans mon projet que parfois npm commence à échouer lorsque npm install est effectué, mais, après avoir exécuté npm run build, tout fonctionne très bien.

En quoi les fonctionnements internes de ces deux commandes à savoir install et run build diffèrent-ils?

2 votes

La réponse acceptée jusqu'à présent est discutable. Je pense que les réponses de MKP et CTS_AE sont plus pertinentes en ce moment. Avec tout le respect dû, cela devrait être porté à l'attention du modérateur et/ou de celui qui a posé cette question.

171voto

Churro Points 1258

npm install installe les dépendances dans le répertoire node_modules / , pour le projet node sur lequel vous travaillez. Vous pouvez appeler install sur un autre projet (module) node.js, pour l'installer en tant que dépendance pour votre projet.

npm run build ne fait rien à moins que vous ne spécifiez ce que "build" fait dans votre fichier package.json. Cela 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.

npm build est une commande interne et est appelée par les commandes link et install , selon la documentation pour build :

C'est la commande de plomberie appelée par npm link et npm install.

Normalement, vous n'appellerez pas npm build car il est utilisé en interne pour construire des modules complémentaires natifs C / C ++ Node à l'aide de node-gyp.

3 votes

Après avoir consulté la réponse correcte du lien ci-dessous, je pense aussi que npm build et npm run build ne sont pas la même chose. À mon avis, peut-être que la réponse ci-dessus de @churro doit être corrigée. Veuillez me corriger si je me trompe. stackoverflow.com/questions/29939697/…

0 votes

Donc npm install exécute automatiquement npm run build pour tous les scripts de dépendances ? Où est-ce documenté ?

144voto

CTS_AE Points 1927

NPM en 2019

npm build n'existe plus. Vous devez désormais appeler npm run build. Plus d'informations ci-dessous.

TLDR;

npm install: installe les dépendances, puis appelle l'install du champ scripts du package.json.

npm run build: exécute le champ build du package.json scripts field.


Champ de scripts NPM

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

Il y a beaucoup de choses que vous pouvez mettre dans le champ scripts du package.json de npm. Consultez le lien de documentation ci-dessus pour en savoir plus sur le cycle de vie des scripts - la plupart ont des hooks pre 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, le shrinkwrap, la version.


Complexifier les choses

  • npm install n'est pas la même chose que npm run install
  • npm install installe les dépendances du package.json, puis exécute le scripts.install du package.json
    • (Essentiellement appelle npm run install après l'installation des dépendances.
  • npm run install exécute uniquement le scripts.install du package.json, il ne installera pas les dépendances.
  • npm build était une commande valide (autrefois identique à npm run build) mais ce n'est plus le cas; c'est maintenant une commande interne. Si vous l'exécutez, vous obtiendrez : Avertissement npm build appelé sans arguments. Vouliez-vous dire npm run-script build? Vous pouvez en savoir plus dans la documentation : https://docs.npmjs.com/cli/build ou https://docs.npmjs.com/cli/v6/commands/npm-build

Notes supplémentaires

Il y a toujours deux commandes de premier niveau qui exécuteront des scripts, ce sont :

  • npm start qui est identique à npm run start
  • npm test ==> npm run test

9 votes

+1 Mais c'est confus de dire que npm build 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 plus rien maintenant. Cette réponse à une autre question a donné le résumé le plus court sur npm build vs npm run build.

0 votes

Je viens d'essayer d'utiliser yarn sur un récent projet promu par nul autre que les gens de Salesforce... yarn n'a pas fonctionné. Mais NPM a parfaitement fonctionné

1 votes

Le lien est cassé, voici un lien mis à jour : docs.npmjs.com/cli/v6/commands/npm-build

57voto

MKP Points 435

La principale différence est :

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

npm run %command-name% ou npm run-script %command-name% 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". Ainsi, dans ce cas, npm run build est une commande de script personnalisée avec le nom "build" et exécutera tout ce qui est spécifié à l'intérieur (par exemple echo 'hello world' donné dans l'exemple package.json ci-dessous).

Points à noter :

  1. Une autre chose, npm build et npm run build sont deux choses différentes, npm run build effectuera un travail personnalisé écrit à l'intérieur de package.json et npm build est un script prédéfini (non disponible à utiliser directement).

  2. Vous ne pouvez pas spécifier quelque chose à l'intérieur du script de construction personnalisé (npm run build) et vous attendre à ce que npm build fasse la même chose. Essayez la chose suivante pour 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 exécutez npm run build et npm build un par un et vous verrez la différence. Pour en savoir plus sur les commandes, veuillez suivre la documentation npm.

13 votes

Plutôt que de "tenter d'exécuter cela", j'apprécierais que vous expliquiez plus en détail quelle est la différence entre npm run build et npm build. D'accord, donc ils ne sont pas identiques, en quoi diffèrent-ils ? Donc la réponse de @Churro est incorrecte alors ?

7 votes

Oui, ce que npm build fait reste un mystère. Ce serait bien de le savoir. Autant que je le sache, "npm build fera comme écrit par Churro" n'est pas vrai. Churro a dit que cela ferait ce qui est spécifié dans le fichier package.json pour la commande build (comme défini dans la section des scripts je suppose). Mais c'est ce que npm run build fait, et npm build ne lance pas la commande de build spécifiée dans la section scripts du fichier package.json. À moins qu'il y ait un autre moyen de définir ce que npm build devrait faire dans le fichier package.json, ce qui n'est pas expliqué ici, ni par Churro (ni dans la documentation de NPM, je pense, malheureusement).

2 votes

Donc, j'ai essayé et npm build a dit npm WARN build npm build appelé sans arguments. Vouliez-vous dire npm run-script build?. Je pense que cela n'a rien fait. Après avoir passé du temps à lire toutes les réponses ici et à essayer moi-même, je ne peux toujours pas dire quel est le but de npm build :(.

7voto

Chanoch Points 89
  • npm install installe les dépendances de votre configuration package.json.
  • npm run build exécute le script "build" et crée 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 quelle était le problème, mais fondamentalement si vous regardez votre configuration de scripts, je suppose que "build" utilise un outil de construction pour créer votre application tandis que "start" suppose que la construction a été faite mais échoue si le fichier n'est pas là.

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

Les outils de construction ont tendance à créer un fichier dans un dossier bin/, dist/ ou build/ que le script de démarrage appelle alors - par exemple "node build/server.js". Lorsque votre npm start échoue, c'est probablement parce que vous avez appelé npm clean ou similaire pour supprimer la dernière construction, donc votre fichier d'application n'est pas présent, ce qui fait échouer npm start.

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

Je ne suis pas tout à fait sûr de ce que fait npm build, mais il semble que cela soit lié à des scripts de post-installation et d'emballage dans les dépendances. Je suppose que cela pourrait permettre de s'assurer que des scripts de construction CLI ou des 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X