102 votes

Pourquoi "npm install" est-il vraiment lent?

Qu'est-ce que je fais de mal lorsque je configure mes packages ? Y a-t-il un moyen d'accélérer cela ?

  • packages.json :

    {
    "name": "testing node",
    "version": "0.0.0",
    "description": "",
    "main": "app.config.js",
    "dependencies": {
        "babel-core": "^6.17.0",
        "babel-loader": "^6.2.0",
        "babel-plugin-add-module-exports": "^0.1.2",
        "babel-plugin-react-html-attrs": "^2.0.0",
        "babel-plugin-transform-class-properties": "^6.3.13",
        "babel-plugin-transform-decorators-legacy": "^1.3.4",
        "babel-preset-es2015": "^6.3.13",
        "babel-preset-react": "^6.3.13",
        "babel-preset-stage-0": "^6.3.13",
        "react": "^0.14.6",
        "react-dom": "^0.14.6",
        "webpack": "^1.12.9",
        "webpack-dev-server": "^1.14.1",
        "mysql": "*"
    },
    "devDependencies": {},
    "scripts": {
        "dev": "webpack-dev-server --content-base src --inline --hot",
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC"
    }

Quand je suis dans le dossier si je lance

npm install

Je reçois le suivant qui peut prendre des heures pour se configurer complètement :

npm install stuck

Ce n'est pas un problème de calcul ou de matériel général. Les vitesses comparatives sont ci-dessous :

    1. Exécutez haversine pour calculer toutes les distances sur plus de 1 million d'enregistrements dans une table mysql non indexée prend significativement moins de temps. (calculatoire)
    1. Téléchargez une installation complète de Linux (image ISO DVD de double couche) en significativement moins de temps. (largeur de bande)

Je soupçonne qu'il y a quelque chose de mal avec mon packages.json ou la commande que j'exécute npm install. D'après l'image, il semble y avoir de nombreuses tentatives pour récupérer le même fichier. Il est possible qu'il existe un moyen de forcer npm à récupérer à partir d'un miroir plus stable ? Peut-être que la sélection automatique du miroir par défaut est défectueuse ? Juste quelques suggestions -- je ne connais pas la cause spécifique c'est pourquoi je demande.

Ce problème se produit également sur mes serveurs Linode, Digital Ocean et VULTR -- donc je soupçonne que c'est quelque chose de spécifique à npm, à la façon dont je l'utilise (quelque chose manque), ou à mon packages.json.

0 votes

Y a-t-il une sortie plus significative lorsque vous exécutez npm --loglevel=silly install?

0 votes

@LINKIWI - je vais essayer ça -- donnez-moi un peu de temps pour le faire tourner.

13 votes

@hardillb - pas vraiment un problème avec ma vitesse Internet ou ma machine. Peut télécharger une installation complète de linux plus rapidement que npm install prend pour obtenir quelques scripts -- sur le même ordinateur. En comparaison, peut exécuter haversine sur un ensemble d'enregistrements non indexé dans mysql sur plus de 1 million d'enregistrements plus rapidement.

56voto

Sanuel Jackson Points 1041

J'ai pu résoudre cela à partir de la section des commentaires; je décris le processus ci-dessous.

Des commentaires

AndreFigueiredo a déclaré :

J'ai installé les modules ici en moins d'1 minute avec votre package.json avec npm v3.5.2 et node v4.2.6. Je vous suggère de mettre à jour node et npm.


La version 1.3.0 n'avait même pas introduit les dépendances aplaties de la version 3 qui ont résolu de nombreux problèmes ennuyeux.

LINKIWI a déclaré :

En général, ne comptez pas sur les gestionnaires de paquets comme apt pour maintenir des logiciels à jour. Je recommande vivement de purger le combo node/npm que vous avez installé avec apt et de suivre les instructions sur nodejs.org pour installer la dernière version.

Observations

En suivant leur conseil, j'ai remarqué que CentOS, Ubuntu et Debian utilisent tous des versions très obsolètes de nodejs et npm lors de la récupération de la version actuelle en utilisant apt ou yum (en fonction du gestionnaire de paquets principal du système d'exploitation).

Se débarrasser de la version obsolète de nodejs et npm

Pour résoudre cela avec le moins de maux de tête possible, j'ai exécuté la commande suivante (sur Ubuntu) :

apt-get purge --auto-remove nodejs npm

Cela a purgé le système de l'archaïque nodejs et npm ainsi que toutes les dépendances qui n'étaient plus nécessaires.

Installer la version actuelle de nodejs et npm compatibles

L'objectif suivant était d'obtenir une version actuelle de nodejs et npm pour laquelle je peux obtenir nodejs directement depuis ici et le compiler ou utiliser le binaire, cependant cela ne faciliterait pas le changement de versions comme je le souhaite (en fonction de l'âge du projet).

J'ai trouvé un excellent package appelé nvm qui semble (jusqu'à présent) gérer très bien cette tâche. Pour installer la dernière version stable de la version 7 de nodejs :

Installer nvm

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

Sourcer .bashrc

source ~/.bashrc

Utiliser nvm pour installer nodejs 7.x

nvm install 7

Après l'installation, j'ai été agréablement surpris par la nettement plus rapide performance de npm, qui affichait désormais une jolie barre de progression lors de la récupération des paquets.

Pour ceux qui sont curieux, la version actuelle (à ce jour) de npm devrait ressembler à ce qui suit (et si ce n'est pas le cas, vous devez probablement la mettre à jour) :

npm actuel en cours d'exécution

Résumé

NE PAS UTILISER LE GESTIONNAIRE DE PAQUETS DE VOTRE OS POUR INSTALLER NODE.JS OU NPM - Vous obtiendrez de très mauvais résultats car il semble qu'aucun OS ne maintienne ces packages à jour (pas même proches). Si vous constatez que npm est lent à s'exécuter et que ce n'est pas à cause de votre ordinateur ou de votre connexion Internet, c'est très probablement en raison d'une version extrêmement obsolète.

1 votes

Agréable. n vaut la peine d'être considéré comme une alternative plus simple à nvm, installable avec curl -L https://git.io/n-install | bash

1 votes

Je recommande fortement d'utiliser nvm pour régler la version de Node que vous utilisez. github.com/creationix/nvm

1 votes

Pour les versions actuelles, on peut simplement ajouter un dépôt, comme spécifié sur le site Node.js

16voto

Abdul Hameed Points 571

Je utilise Linux et j'ai nvm en travaillant avec plus de 7 versions de node En fonction de mon expérience, j'ai vécu la même situation avec mon projet le plus récent (en fait pas des heures mais des minutes car je ne peux pas attendre des heures à cause du projet horaire :))

Avis de non-responsabilité: ne pas essayer l'option ci-dessous tant que vous ne savez pas comment fonctionne le nettoyage du cache

npm cache clean --force

et ensuite tout fonctionne bien pour moi, donc on dirait que parfois le cache de npm se confond avec les différentes versions de Node.

La documentation officielle du cache Npm peut être trouvée ici

1 votes

J'avais des problèmes avec le "chargement" initial de npm. Le premier message restait affiché pendant 15 à 30 secondes, puis disparaissait rapidement. Après avoir exécuté votre commande, le problème a été résolu ! Maintenant, il démarre immédiatement comme d'habitude avec nodejs v8.11.3 et npm 5.6.0 sur Windows 7 x64

21 votes

Je pense qu'ajouter une brève explication sur le fonctionnement du nettoyage du cache (ou au moins un lien) serait mieux ici

9voto

Colin D Points 21

Je vois sur votre capture d'écran que vous utilisez WSL sur Windows. Et, avec Windows, viennent les scanners de virus, et l'analyse des virus peut rendre l'installation de NPM très lente!

Ajouter une exemption ou désactiver l'analyse des virus pendant l'installation peut grandement accélérer le processus, mais cela peut potentiellement être indésirable étant donné la possibilité de packages NPM malveillants

Un lien suggère un triplement du temps d'installation https://ikriv.com/blog/?p=2174

Je n'ai pas fait de profilage approfondi moi-même cependant

1 votes

Je peux confirmer que la désactivation de la numérisation en temps réel augmente la vitesse de npm install.

1 votes

Il s'agit d'un problème très négligé, bien de ta part de le mettre ici. Merci.

4voto

moodboom Points 661

Problème: NPM ne fonctionne pas bien si vous ne le gardez pas à jour. Cependant, les versions de pointe m'ont causé des problèmes dans le passé.

Solution: Comme Kraang l'a mentionné, utilisez le gestionnaire de versions node nvm, avec son drapeau --lts

Installez-le:

curl -o- https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash

Ensuite, utilisez ceci souvent pour passer à la dernière version "long-term support" de NPM:

nvm install --lts

Gros avertissement: vous devrez probablement réinstaller tous les packages lorsque vous obtenez une nouvelle version de npm.

2voto

atb00ker Points 63

J'avais le même problème, j'utilise la version nodejs: 8.9.4 et la version npm: 5.6.0. J'ai essayé de nombreuses solutions en ligne, y compris celles de ce post, mais aucune n'a fonctionné pour moi. Puis j'ai découvert le gestionnaire de paquets yarn qui a résolu le problème pour moi, donc si tout échoue, je pense que "yarn" vaut la peine d'être essayé.

EDIT:

Il semble que npm rencontre des problèmes lorsqu'il est obsolète, le fait de le mettre à jour m'a également aidé.

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