Comment installer une version exacte précédente d'un package NPM?

917

J'ai utilisé nvm pour télécharger le nœud v0.4.10 et installé npm pour travailler avec cette version du nœud.

J'essaie d'installer express en utilisant

npm install express -g

et j'obtiens une erreur qui exprime nécessite la version du nœud> = 0.5.0.

Eh bien, cela est étrange, puisque je suis les directions pour un nœud + + MongoDB exprimer tutoriel ici que le noeud utilisé v0.4.10, je suis tellement suppose express est / était disponible au noeud v0.4.10. Si mon hypothèse est correcte, comment dire à npm de récupérer une version qui fonctionnerait avec ma configuration?

stewart99
la source
7
Pourquoi ne mettez-vous pas simplement à jour votre version Node? Je suis sûr qu'il devrait y avoir beaucoup plus de bons ajouts que de comportements brisés que vous trouverez.
Fabrício Matté
1
Parfois, ce n'est pas une option. S'il a utilisé nvm pour rétrograder, il peut y avoir une raison, telle qu'un autre groupe contrôle la version du nœud exécutable qu'il doit utiliser.
fool4jesus

Réponses:

1584

Si vous devez installer une ancienne version d'un package, spécifiez-la simplement

npm install <package>@<version>

Par exemple: npm install [email protected]

Vous pouvez également ajouter l' --saveindicateur à cette commande pour l'ajouter à vos dépendances package.json, ou des --save --save-exactindicateurs si vous souhaitez que la version exacte soit spécifiée dans vos dépendances package.json.

La installcommande est documentée ici: https://docs.npmjs.com/cli/install

Si vous n'êtes pas sûr des versions d'un package disponibles, vous pouvez utiliser:

npm view <package> versions

Et npm viewpeut également être utilisé pour afficher d'autres choses sur un package. https://docs.npmjs.com/cli/view

Bret Copeland
la source
4
Je crois que cela installera la version principale la plus proche qui correspond, donc ce n'est peut-être pas ce que vous attendez stackoverflow.com/a/22345808/1074400
Aakil Fernandes
2
@AakilFernandes si vous spécifiez une version exacte, une version exacte sera installée. Si vous spécifiez une plage de versions sémantique, vous pouvez obtenir une correspondance non exacte. À cet égard, la commande install n'a rien d'unique.
Bret Copeland
6
npm view <package> versions -jsonpour voir chaque version, en évitant les points de suspension à la fin d'une liste avec de nombreuses versions.
TheDarkIn1978
5
Si vous utilisez npm install [email protected], vous n'obtiendrez pas la version exacte 3.0.0, vous obtiendrez la dernière version 3.xx. Pour obtenir la version spécifique, vous devez utiliser npm install [email protected] --save-exact. Voir cet article de blog: 60devs.com/npm-install-specific-version.html
Patrick Hund
5
@PatrickHund non, npm install [email protected]vous obtiendrez exactement la version 3.0.0. npm install express@^3.0.0vous obtiendrait le dernier 3.xx --save-exactaffecte la façon dont il est écrit dans packages.json, que j'ai déjà couvert dans ma réponse. Notez également, --save-exactdoit être utilisé en combinaison avec --saveou --save-dev- il ne suffit pas de l'utiliser seul.
Bret Copeland
94

C'est assez simple. Écrivez simplement ceci, par exemple:

npm install -g npm@4.6.1

Ou:

npm install -g npm@latest    // For the last stable version
npm install -g npm@next      // For the most recent release
inaps
la source
1
Merci pour les balises de version latestet next!
Jimmy Adaro
@inaps, vous pouvez ajouter une note indiquant que l' -gindicateur concerne spécifiquement les packages que vous souhaitez installer à l'échelle mondiale, car de nombreux utilisateurs accèdent à cette page et se contentent de copier / coller sans se rendre compte de la façon dont ils sont sur le point d'avoir un impact sur leur écosystème de packages. Nous avons tous été "ce gars"
Jacksonkr
73

Supprimez d'abord l'ancienne version, puis exécutez littéralement ce qui suit:

npm install express@3.X

et pour stable ou récent

npm install -g npm@latest    // For the last stable version
npm install -g npm@next      // For the most recent release
Saurabh Chandra Patel
la source
12
Est-ce un littéral Xou un remplaçant pour un numéro de version numérique?
Keith Thompson
7
C'était une question soit / ou pas, pas une question oui / non. J'ai essayé npm install [email protected], et cela a semblé fonctionner. Est-ce une fonctionnalité ou un accident de la façon dont npmle numéro de version est analysé?
Keith Thompson
3
@KeithThompson Oui, c'est ça! Hehe, je plaisante ... C'est la façon dont npmça analyse, voir: docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-
gonz
3
@gonz: C'est donc un littéral X.
Keith Thompson
1
Je voulais juste expliquer pourquoi cela a fonctionné pour vous. Je ne connais pas l'intention originale de Saurabh ni ce que vous essayez de faire. 3.X signifierait> = 3.0 et <4.0.
gonz
41

À mon avis, c'est le moyen le plus simple et le plus rapide:

$ npm -v

4.2.0

$ npm install -g npm@latest-3

...

$ npm -v

3.10.10

Oleg Bezkorovaynyi
la source
2

vous pouvez mettre à jour votre package npm en utilisant cette commande:

npm install <package_name>@<version_number>

exemple: npm install [email protected]

Mehedi Abdullah
la source
1

J'ai un moyen général de résoudre ce type de problèmes, qui pourrait également être utile, en particulier lors du clonage de référentiels pour les exécuter localement, mais nécessite un peu plus d'analyse des versions.

Avec le package, npm-check-updatesje vérifie les versions des packages (selon le fichier package.json) qui ne sont pas déclarées dans leurs dernières versions disponibles, comme le montre la figure ( https://www.npmjs.com/package/npm-check -mises à jour ):

entrez la description de l'image ici

Avec ces informations, nous pouvons vérifier l'état de mise à jour des différents packages et prendre des décisions quant aux packages à mettre à niveau / à dégrader et ceux qui ne le font pas.

En supposant que nous avons décidé de mettre à jour tous les packages tels qu'ils sont répertoriés, nous pouvons utiliser le ncu -u commande qui modifie uniquement votre fichier package.json. Exécutez npm installpour mettre à jour vos packages installés et package-lock.json.

Ensuite, selon les exigences du référentiel, nous pouvons affiner ce qui est nécessaire, installer les versions spécifiques avec npm view <package> versionset npm install <package>@<version>

Alejandro Araujo
la source
1

npm install -g npm@version

dans lequel vous souhaitez rétrograder

npm install -g [email protected]

Lakshay Sharma
la source
mais si j'en ai besoin localement? dois-je mettre --save?
AlexNikonov
Oui, vous l'avez aussi .. il téléchargera le package localement.
Lakshay Sharma
@AlexNikonov ommite le -g(pour l'installation globale, puis il atterrit dans le répertoire de votre projet actuel /node_modules) et oui, --saveou --save-devpour obtenir une entréepackage.json
Frank Nocke
0

Vous pouvez utiliser la commande suivante pour installer une version précédente d'un package npm:

npm install packagename@version
Pinky
la source
0

Pour les utilisateurs de fils:

yarn add package_name@version_number
Peter Moses
la source
-3

Sur Ubuntu, vous pouvez essayer cette commande.

sudo npm cache clean -f
sudo npm install -g n
sudo n stable 

Version spécifique: sudo n 8.11.3 au lieu de sudo n stable

Deepti Gehlot
la source