Comment mettre à jour chaque dépendance dans package.json vers la dernière version?

2014

J'ai copié package.json à partir d'un autre projet et je veux maintenant transférer toutes les dépendances vers leurs dernières versions car il s'agit d'un nouveau projet et cela ne me dérange pas de réparer quelque chose s'il se casse.

Quelle est la façon la plus simple de procéder?

La meilleure façon que je sache maintenant est d'exécuter npm info express versionpuis de mettre à jour package.json manuellement pour chacun. Il doit y avoir un meilleur moyen.

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

MISE À JOUR 5/1/19 : Six ans plus tard et je maintiens toujours npm-check-updates comme une solution complète à ce problème. Prendre plaisir!

Raine Revere
la source
2
Super de voir une autre approche à ce problème. J'aime vraiment la sortie de Salita. Quelques fonctionnalités intéressantes auxquelles l'outil auquel je contribue maintenant, github.com/tjunnone/npm-check-updates, sont la préservation de la sémantique de versioning (comme 1.x ou> 2.1.0) et le filtrage par nom / regex / devDeps uniquement.
Raine Revere
1
Il FAUT avoir de meilleures réponses ici. Évidemment, avec la résolution des dépendances, vous ne pouvez pas toujours avoir la dernière version de tout. Maximiser le plus grand nombre de dernières versions de modules n'est que cela, une sorte de problème d'optimisation. Mais NPM ne sait pas quels modules vous souhaitez être plus récents que les autres. Ce serait cool s'il y avait quelque chose comme ça: npm update --latest xyz, où xyz sont les modules que vous voulez être aussi récents que possible et tous les autres modules suivront avec leur version compatible la plus récente.
Alexander Mills
2
npm gèrera correctement les conflits de version entre les dépendances partagées en téléchargeant la bonne pour chacune. Ainsi, si Dep A dépend de Dep C v1.0.0 et Dep B dépend de Dep C v2.0.0, ils seront chacun installés et utilisés de manière appropriée. Par conséquent, vous êtes libre d'installer le dernier des packages que vous souhaitez.
Raine Revere
Essayez ceci pour forcer la mise à niveau:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey
Je vérifie toujours cette réponse. Mais je vois qu'il a glissé dans les résultats de Google. Espérons que ce commentaire aidera à faire remonter sa pertinence !!
Zach Smith

Réponses:

2395

Il semble que npm-check-updates soit le seul moyen d'y arriver maintenant.

npm i -g npm-check-updates
ncu -u
npm install

Sur npm <3,11:

Changez simplement la version de chaque dépendance en *, puis exécutez npm update --save. ( Remarque: cassé dans les versions récentes (3.11) de npm ).

Avant:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

Après:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

Bien sûr, c'est le marteau émoussé de la mise à jour des dépendances. C'est bien si - comme vous l'avez dit - le projet est vide et rien ne peut se casser.

D'un autre côté, si vous travaillez dans un projet plus mature, vous voudrez probablement vérifier qu'il n'y a pas de changements de rupture dans vos dépendances avant la mise à niveau.

Pour voir quels modules sont obsolètes, lancez simplement npm outdated. Il répertorie toutes les dépendances installées qui ont des versions plus récentes disponibles.

josh3736
la source
13
@thefourtheye: Vous ne devriez généralement pas laisser * dans package.json car vous pourriez finir par installer automatiquement une nouvelle version de module avec des changements de rupture qui cassent votre application. Puisque nous utilisons --saveici, le *est remplacé par la version actuelle de chaque package.
josh3736
50
Je n'arrive pas à faire fonctionner ça. Quelque chose a-t-il changé avec npm depuis que cette réponse a été publiée? Lorsque j'utilise le caractère générique, puis npm install --savele caractère générique est laissé dans mon package.json.
davidtheclark
15
Malheureusement, l'utilisation updatene fonctionne pas non plus, pour moi. Je reste avec les jokers. Existe-t-il des documents à ce sujet ou d'autres ressources que je pourrais consulter?
davidtheclark
120
Un peu vieux mais cela pourrait aider d'autres personnes: github.com/tjunnone/npm-check-updates | Utilisez npm install -g npm-check-updatespour installer, puis npm-check-updatespour vérifier si vos dépendances ont des mises npm-check-updates -uà jour et pour mettre à jour vos versions de package.json. Ensuite, c'est juste npm installet il téléchargera de nouvelles versions.
RaphaelDDL
5
Votre problème vient probablement du fait que vous essayez de mettre à jour les packages de développement en tapant à la npm update --saveplace de npm update --save-dev.
adriendenat
1036

npm-check-updates est un utilitaire qui ajuste automatiquement un package.json avec la dernière version de toutes les dépendances

voir https://www.npmjs.org/package/npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

[EDIT] Une façon un peu moins intrusive (évite une installation globale) de faire cela si vous avez une version moderne de npmest:

$ npx npm-check-updates -u
$ npm install 
Etienne
la source
135
Cela devrait être disponible nativement via la commande npm elle-même, en effet la meilleure solution jusqu'à présent pour mettre à jour les dépendances.
Mohammad Arif
7
Devrait faire partie de npm nativement, entièrement d'accord. Cependant, ce n'est pas le cas et cette solution se présente comme un jeu d'enfant. Je vous remercie.
Stefan
2
je suppose que vous les gars poussent [HARD] pour obtenir cela dans le noyau npm?
enorl76
3
@Batman Oui si vous ne l'avez pas installé auparavant. Sinon, utilisez la mise à jour npm. ncu met juste à jour package.json. Il n'installe ni ne met à jour 'node_modules'.
Muzaffer
1
package inutile, ne mettant à jour qu'une partie des packages avec ncu -a, pas également la mise à jour de package.json.
Alexander Kim
385

Mis à jour pour le dernier NPM

npm 2+ (nœud 0.12+):


npm outdated
npm update
git commit package-lock.json

Ancien npm (vers 2014):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

Assurez-vous de bien emballer vos dépôts, sinon vous risquez de vous retrouver avec un projet mort. J'ai retiré un projet l'autre jour et il ne fonctionnerait pas parce que mes agents étaient tous obsolètes / mis à jour / en désordre. Si j'avais emballé, npm aurait installé exactement ce dont j'avais besoin.


Détails

Pour les curieux qui arrivent jusque-là, voici ce que je recommande:

Utilisez npm-check-updatesou npm outdatedpour suggérer les dernières versions.

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

Ensuite, faites une installation propre (sans le rm, j'ai reçu des avertissements de dépendance)

$ rm -rf node_modules
$ npm install 

Enfin, enregistrez les versions exactes npm-shrinkwrap.jsonavecnpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Maintenant, npm installva maintenant utiliser des versions exactes dansnpm-shrinkwrap.json

Si vous vous npm-shrinkwrap.jsonconnectez à git, toutes les installations utiliseront exactement les mêmes versions.

C'est un moyen de passer du développement (toutes les mises à jour, tout le temps) à la production (personne ne touche à rien).

ps Yarn envoie votre liste de colis à Facebook .

Michael Cole
la source
13
c'est la vraie réponse correcte. avec des dizaines de députés installés, c'est sans aucun doute une meilleure façon
Angel S. Moreno
6
Par expérience, le conseil de toujours mettre à jour tous les packages en même temps peut être dangereux.
alphadogg
1
Pour sûr. Si vous créez et npm-shrinkwrap.jsonen source, et que vous vous engagez chaque fois que vous mettez à jour, vous pouvez toujours `` retourner là où vous étiez ''. J'ai ignoré la fonction de film rétractable lorsque j'ai commencé.
Michael Cole
21
cela ne répond pas à la question. La question est de savoir comment mettre à jour la dernière version. npm updatene met à jour que la version semver, pas la dernière.
gman
1
Pouvez-vous répondre s'il existe une alternative à yarn upgrade package@version?
Ben Sinclair
201

Pour mettre à jour une dépendance vers sa dernière version sans avoir à l'ouvrir manuellement package.jsonet à la modifier, vous pouvez exécuter

npm install {package-name}@* {save flags?}

c'est à dire

npm install express@* --save

Pour référence, npm-install


Comme l'a noté l'utilisateur Vespakoen lors d'une modification refusée, il est également possible de mettre à jour plusieurs packages à la fois de cette façon:

npm install --save package-nave@* other-package@* whatever-thing@*

Il ajoute également une doublure pour la coque basée sur npm outdated. Voir l'édition pour le code et l'explication.


PS: je déteste aussi devoir éditer manuellement package.jsonpour des choses comme ça;)

laconbass
la source
8
Cette solution est excellente. Un moyen rapide et facile de mettre à jour explicitement un seul package vers la dernière version sans installer de nouveaux modules. J'aime npm-check-updates, mais afaik essaie de garder tous les paquets à jour, ce qui n'est pas toujours ce que vous voulez.
Chev
cela ne fonctionne pas pour moinpm install react-native-image-picker@* --save
Harry Moreno
1
@Chev: ncu peut facilement cibler un ou plusieurs packages avec ncu express mocha chai. Vous pouvez également exclure des packages avec ncu -x mocha. Je suis d'accord que ce qui précède est la solution la plus simple pour mettre à jour un seul package.
Raine Revere
2
J'ai juste utilisé quelque chose de similaire qui a fonctionné, à partir de documents probablement plus récents ... utilise "dernier" au lieu de "*"npm install {package-name}@latest {save flags}
Drew Thomas
1
Merci beaucoup, cette solution est excellente et exactement ce que je recherche. Il vous permet de mettre à jour un package particulier sans avoir besoin de mettre à jour toutes les autres dépendances, ce qui peut entraîner des problèmes imprévus!
Dany Wehbe
90

Si vous utilisez Visual Studio Code comme IDE, il s'agit d'une petite extension amusante pour mettre à jour package.jsonun processus en un clic.

Version Lens

entrez la description de l'image ici

GollyJer
la source
2
Il y a une version sublime de texte 3 ici: github.com/yavorsky/Bump , bien qu'un peu lent.
Alexander Kim
4
Fonctionne magnifiquement, au cas où cela ne serait clair pour personne, cela vérifie simplement les versions de votre package.json par rapport aux dernières versions du référentiel npm et vous permet de cliquer sur une version pour mettre à jour le contenu du texte dans votre package.json. Vous devez ensuite exécuter "npm update" pour indiquer à npm d'installer les nouvelles versions.
MattG
2
Notez qu'il est déjà possible de voir la dernière version des dépendances du package avec une brève description dans Visual Studio Code intégré en
passant la
1
Notez qu'il n'installe pas automatiquement les packages lorsque vous cliquez sur un lien d'objectif de code! Il met simplement à jour le texte de la version package.json.
RA.
59

Cela fonctionne à partir de npm 1.3.15.

"dependencies": {
  "foo": "latest"
}
Tobiasz Cudnik
la source
10
Bon à savoir. Je suppose que ce serait généralement une mauvaise pratique sur n'importe quel site de production car il se mettra automatiquement à jour vers des versions potentiellement incompatibles en arrière. La syntaxe '~ 2' vous verrouille dans un numéro de version majeur donné, qui après la semver sera rétrocompatible.
Raine Revere
1
Vous pouvez toujours geler les deps sur prod. Theres une commande pour cela. -2 sonne bien.
Tobiasz Cudnik
5
J'aime l'utiliser avec npm shrinkwrappour figer les deps.
daniellmb
Si nous le faisons, comment pouvons-nous connaître la version réelle de ce package? Supposons que j'aie appelé une entrée "react": "16.9.0", puis que j'ajoute la dernière version et que je lance npm i, après quoi comment puis-je trouver la version de react qui est maintenant dans mon projet? car "react":"latest"est ce qui est laissé dans mon package.json, pas un nombre pair après que je l'ai faitnpm i
theprogrammer
52
  1. Utiliser *comme version pour les dernières versions, y compris instable
  2. Utiliser latestcomme définition de version pour la dernière version stable
  3. Modifiez le package.json avec exactement le dernier numéro de version stable à l'aide LatestStablePackages

Voici un exemple:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},
M. Sun Lin
la source
2
C'est la meilleure réponse.
Peza
1
cela aurait dû être la réponse acceptée
EigenFool
toujours l'approche la plus sûre à adopter. Bonne réponse.
klewis
43

La seule mise en garde que j'ai trouvée avec la meilleure réponse ci-dessus est qu'elle met à jour les modules vers la dernière version. Cela signifie qu'il pourrait passer à une version alpha instable.

J'utiliserais cet utilitaire npm-check-updates. Mon groupe a utilisé cet outil et il a fonctionné efficacement en installant les mises à jour stables.

Comme Etienne l'a dit ci-dessus: installez et exécutez avec ceci:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
Tyler Davis
la source
3
rm -rf node_modulesavant npm installde me débarrasser de certains avertissements de dépendance.
Michael Cole
1
Juste au cas où vous auriez "*" dans package.json, changez-le simplement en "0" ou "0.0" ou "0.0.0" avant d'exécuter npm-check-updates.
igorpavlov
C'est la façon la plus simple de le faire. Pas de soucis, pas de rassle. Fonctionne comme un charme. Tous vos dépôts sont mis à jour et installés correctement. Thx
Yoraco Gonzales
38

Pour voir quels packages ont des versions plus récentes disponibles, utilisez la commande suivante:

npm outdated

pour mettre à jour une seule dépendance, utilisez simplement la commande suivante:

npm install yourPackage@latest --save

Par exemple:

Mon package.jsonfichier a une dépendance:

"@progress/kendo-angular-dateinputs": "^1.3.1",

alors je devrais écrire:

npm install @progress/kendo-angular-dateinputs@latest --save
StepUp
la source
Bien mais il semble que --save (ou --save-dev) ne soit pas obligatoire pour la mise à jour.
Burrich
35

J'aime vraiment le fonctionnement de npm-upgrade . Il s'agit d'un simple utilitaire de ligne de commande qui passe par toutes vos dépendances et vous permet de voir la version actuelle par rapport à la dernière version et de la mettre à jour si vous le souhaitez.

Voici une capture d'écran de ce qui se passe après l'exécution npm-upgradeà la racine de votre projet (à côté du package.jsonfichier):

exemple de mise à niveau npm

Pour chaque dépendance, vous pouvez choisir de mettre à niveau, d'ignorer, d'afficher le journal des modifications ou de terminer le processus. Jusqu'à présent, cela a très bien fonctionné pour moi.

EDIT: pour être clair, il s'agit d'un package tiers qui doit être installé avant que la commande ne fonctionne. Il ne vient pas avec npm lui-même:

npm install -g npm-upgrade

Puis à partir de la racine d'un projet qui a un fichier package.json:

npm-upgrade
manncito
la source
En regardant les documents, il semble qu'il n'a été construit que pour fonctionner avec des dépendances locales
manncito
2
oui, juste mentionné aux autres. Aucune plainte contre la réponse :)
Martin Schneider
2
Hmm, npm-upgradeça ne fonctionnait pas pour moi, mais npm upgradeça a mis à jour mon fichier package.json qui était exactement ce que je cherchais.
Grandizer
Hmm intéressant, y a-t-il eu une erreur? L'idée derrière l'utilisation npm-upgradeest que vous pouvez voir exactement ce qui est mis à niveau et choisir ceux qui sont mis à niveau. npm upgradepeut fonctionner correctement pour la plupart des gens, mais vous devez parfois avoir un peu plus de contrôle lors de la mise à niveau.
manncito
1
Vous pouvez également l'utiliser avec npx: npx npm-upgrade- assez cool! :)
x-ray
22

Voici une expression rationnelle de base pour faire correspondre les numéros de version sémantiques afin que vous puissiez les remplacer rapidement par un astérisque.

Version sémantique Regex

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

Comment utiliser

Sélectionnez les versions de package que vous souhaitez remplacer dans le fichier JSON.

capture d'écran: sélectionnez le texte que vous souhaitez remplacer

Saisissez l'expression régulière ci-dessus et vérifiez qu'elle correspond au texte correct.

capture d'écran: entrez le reverx semver ci-dessus

Remplacez toutes les correspondances par un astérisque.

capture d'écran: remplacez les versions du package par un astérisque

Courir npm update --save

daniellmb
la source
ne le fait pas quand il y a un numéro dans un nom de paquet. c'est-à-dire: babel-preset-es2015, babel-preset-stage-0, hex2rgba. Peut-être chercher un devis / double devis au début:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
rofrol
1
sur n'importe quel éditeur prenant en charge plusieurs carets (ej Sublime Text), vous pouvez sélectionner le premier :et appuyer ctrl+dplusieurs fois jusqu'à ce que vous les sélectionniez tous, puis accédez au numéro de version (appuyez deux fois sur la flèche droite) et appuyez sur la touche ctrl, puis écrivez"*"
Ivan Castellanos
15

J'ai récemment dû mettre à jour plusieurs projets qui utilisaient npm et package.json pour leur magie gruntfile.js. La commande bash suivante (commande multiligne) a bien fonctionné pour moi:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

L'idée ici: Pour diriger la npm outdatedsortie en tant que json, vers jq
(jq est un analyseur / requête de ligne de commande json)
(notez l'utilisation de l' --depthargument pour npm outdated)
jq supprimera la sortie uniquement jusqu'au nom de package de niveau supérieur uniquement.
enfin xargs place chaque LIBRARYNAME un par un dans une npm install LIBRARYNAME --save-devcommande

Ce qui précède est ce qui a fonctionné pour moi sur une machine en cours d'exécution: node = v0.11.10 osx = 10.9.2 npm = 1.3.24

cela exigeait:
xargs http://en.wikipedia.org/wiki/Xargs (natif de ma machine, je crois)
et
jq http://stedolan.github.io/jq/ (je l'ai installé avec brew install jq)

Remarque: Je sauvegarde uniquement les bibliothèques mises à jour dans package.json à l'intérieur de la clé json devDependanciesen utilisant --save-dev, c'était une exigence de mes projets, tout à fait possible pas la vôtre.

Ensuite je vérifie que tout est sauce avec un simple

npm outdated --depth=0

En outre, vous pouvez vérifier les versions de bibliothèque installées de niveau supérieur actuelles avec

npm list --depth=0
andxyz
la source
J'adore jq et je l'utilise presque tous les jours, mais à cette fin, j'utilise simple à la awkplace:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Qorbani
1
J'utilisecat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Richard Ayotte
15

Si vous souhaitez utiliser une approche douce via une belle interface de rapport interactive (pour le terminal), je suggère d'utiliser npm-check .

C'est moins un marteau et vous donne une connaissance et un contrôle plus conséquents de vos mises à jour de dépendances.

Pour vous donner un avant-goût de ce qui vous attend, voici une capture d'écran (extraite de la page git pour npm-check):

entrez la description de l'image ici

TWright
la source
14

Cette fonctionnalité a été introduite dans npm v5. mise à jour vers npm en utilisant npm install -g npm@latestet

mettre à jour package.json

  1. supprimer /node_modulesetpackage-lock.json (if you have any)

  2. courir npm update. cela mettra à jour le package de dépendances.json au plus tard, basé sur semver .

pour mettre à jour vers la toute dernière version. tu peux aller avecnpm-check-updates

Sibiraj
la source
13

Si vous utilisez yarn, la commande suivante met à jour tous les packages vers leur dernière version:

yarn upgrade --latest

De leurs documents :

La upgrade --latestcommande met à niveau les packages de la même manière que la commande de mise à niveau, mais ignore la plage de versions spécifiée dans package.json. Au lieu de cela, la version spécifiée par la dernière balise sera utilisée (potentiellement la mise à niveau des packages à travers les versions principales).

fotijr
la source
1
Ne met pas à jour les dépendances dans package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh
13

Depuis la version 5.2.0 de npm, il existe un moyen de l'exécuter sur une seule ligne sans installer de packages supplémentaires dans votre registre npm global ni localement dans votre application. Cela peut être fait en tirant parti du nouvel npxutilitaire fourni avec npm. ( Cliquez ici pour en savoir plus. )

Exécutez la commande suivante à la racine de votre projet:

npx npm-check-updates -u && npm i
ilyakam
la source
Je viens de l'essayer et cela fonctionne ... sauf que j'ai dû exécuter npm installpour télécharger les nouvelles dépendances. Donc je suppose que cela met à jour le package.json à moins que je manque quelque chose
owsega
@owsega, vous avez absolument raison, merci! J'ai modifié ma réponse pour qu'elle s'exécute également npm installaprès la mise à jour des dépendances.
ilyakam
13

J'utilise npm-checkpour y parvenir.

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

entrez la description de l'image ici

Une autre liste de commandes utile qui gardera les numéros de version exacts dans package.json

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i
goksel
la source
C'est ncu -uet pas ncu -uadans l'avant-dernière ligne. Je ne peux pas modifier car un changement de caractère n'est pas autorisé. Très utile d'ailleurs.
Sohail Ahmed
10

Updtr!

Basé sur npm obsolète, updtr installe la dernière version et exécute le test npm pour chaque dépendance. Si le test réussit, updtr enregistre le nouveau numéro de version dans votre package.json. Cependant, si le test échoue, updtr annule ses modifications.

https://github.com/peerigon/updtr

David Braun
la source
9

Les commandes que je devais utiliser pour mettre à jour package.jsonpour NPM 3.10.10:

npm install -g npm-check-updates
ncu -a
npm install

Contexte:

J'utilisais la dernière commande de @ josh3736 mais ma package.jsonn'a pas été mise à jour. J'ai ensuite remarqué le texte de description lors de l'exécution npm-check-updates -u:

La dépendance suivante est satisfaite par sa plage de versions déclarée, mais la version installée est derrière. Vous pouvez installer la dernière version sans modifier votre fichier de package à l'aide de la mise à jour npm. Si vous souhaitez quand même mettre à jour la dépendance dans votre fichier de package, exécutez ncu -a.

En lisant la documentation de npm-check-updates, vous pouvez voir la différence:

https://www.npmjs.com/package/npm-check-updates

-u, --upgrade: écraser le fichier de package

-a, --upgradeAll: inclut même les dépendances dont la dernière version satisfait la dépendance semver déclarée

ncu est un alias pour npm-check-updatescomme vu dans le message lors de la frappe npm-check-updates -u:

[INFO]: You can also use ncu as an alias
Ogglas
la source
Dans npm-check-updates v3, -ac'est le comportement par défaut, et le remplacement du package.json est laissé uniquement à l' -uoption.
Raine Revere
8

Si vous utilisez yarn, yarn upgrade-interactiveest un outil vraiment élégant qui peut vous permettre de visualiser vos dépendances obsolètes, puis de sélectionner celles que vous souhaitez mettre à jour.

Plus de raisons d'utiliser Yarn Over npm. Il h.

Yangshun Tay
la source
Le fil se déplace rapidement, a déjà atteint un 1.0 et est un sacré plaisir à utiliser. Ce devrait être la nouvelle réponse choisie.
Josh Habdas
1
Ne met pas à jour les dépendances dans package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh
5

Les commandes ci-dessus ne sont pas sûres car vous risquez de casser votre module lors du changement de version. Au lieu de cela, je recommande ce qui suit

  • Définissez la version actuelle des modules de nœud actuels dans package.json à l'aide de la npm shrinkwrapcommande.
  • Mettez à jour chaque dépendance vers la dernière version S'IL NE BRISE PAS VOS TESTS à l'aide de l' outil de ligne de commande https://github.com/bahmutov/next-update
npm install -g next-update
// depuis votre package
prochaine mise à jour
gleb bahmutov
la source
1
Les modifications incompatibles en amont doivent être protégées contre les projets actifs. L'OP est plus concerné par le démarrage d'un nouveau projet où vous souhaitez interrompre les choses maintenant plutôt que plus tard et avoir les dernières versions à partir desquelles vous pouvez travailler.
Raine Revere,
3

Essayez la commande suivante si vous utilisez npm 5 et le noeud 8

mise à jour npm - enregistrer

krunal shah
la source
2
La updatecommande ne semble pas dépasser les dépendances au-delà de la définition d'origine. Si package.jsondéclare "1.2.3"exactement, vous n'obtiendrez pas 1.2.4. Cela peut être bon ou mauvais :)
Álvaro González
3

Le code suivant (qui a été accepté) m'a écrit quelque chose comme "ça prend trop de temps" et n'a rien fait. L'utilisation du drapeau global était probablement le problème, idk.

npm i -g npm-check-updates
ncu -u
npm install

J'ai décidé d'utiliser mon éditeur de texte et de suivre une approche semi-manuelle à la place.

J'ai copié une liste comme celle-ci (juste beaucoup plus longtemps) des dépendances dev de my package.jsonvers l'éditeur de texte notepad ++:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

J'ai défini le mode de recherche sur l'expression régulière, j'ai utilisé le ^\s*"([^"]+)".*$modèle pour obtenir le nom du package et l' ai remplacé par npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Cliquez sur "remplacer tout". La sortie était la suivante:

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

Je l'ai recopié sur bash et appuyez sur Entrée. Tout a été amélioré et fonctionnait bien. C'est tout.

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

Je ne pense pas que ce soit un gros problème, car vous ne devez le faire que de temps en temps, mais vous pouvez facilement écrire un script, qui analyse package.jsonet met à niveau vos packages. Je pense que c'est mieux ainsi, car vous pouvez modifier votre liste si vous avez besoin de quelque chose de spécial, par exemple en gardant la version actuelle d'une lib.

inf3rno
la source
1
Avec npm-check-updates, le terminal suspendu est un problème connu sous Windows. Essayez d'ajouter --packageFile package.jsonpour que ne sache pas attendre stdin.
Raine Revere
@RaineRevere Merci!
inf3rno
3

J'ai résolu cela en voyant les instructions de https://github.com/tjunnone/npm-check-updates

$ npm install -g npm-check-updates
$ ncu
$ ncu -u # to update all the dependencies to latest
$ ncu -u "specific module name"  #in case you want to update specific dependencies to latest
Sunil
la source
3

J'ai trouvé une autre solution pour la version récente de NPM. Ce que je veux faire, c'est remplacer toutes les dépendances "*" par le dernier numéro de version explicite. Aucune des méthodes discutées n'a fonctionné pour moi.

Ce que j'ai fait:

  1. Remplacez tous les "*" par "^ 0.0.0"
  2. Courir npm-check-updates -u

Tout dans package.json est maintenant mis à jour vers la dernière version.

miqrc
la source
3

Si vous ne souhaitez pas installer les mises à jour globales de npm-check, vous pouvez simplement l'exécuter:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"
Yukulélé
la source
2

L'alternative est

"dependencies":{
    "foo" : ">=1.4.5"
}

chaque fois que vous utilisez la mise à jour npm, il se met automatiquement à jour vers la dernière version. Pour plus de syntaxe de version, vous pouvez vérifier ici: https://www.npmjs.org/doc/misc/semver.html

Havre
la source
L'une des raisons du contrôle de version est d'empêcher les modifications incompatibles avec les versions antérieures des versions majeures plus récentes. Je recommanderais contre ce ou les numéros de version «*». L'OP est lié à faciliter le processus tout en maintenant le contrôle sur le moment où il se produit.
Raine Revere
2

Solution sans packages supplémentaires

Changez la version de chaque dépendance en *:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

Ensuite, courez npm update --save.

Certains de vos packages ont été mis à jour, d'autres non?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

Ceci est la partie délicate, cela signifie que votre version locale de "react" était inférieure à la plus récente. Dans ce cas, npm a téléchargé et mis à jour le package "react". Cependant, votre version locale de "react-google-maps" est la même que la plus récente.

Si vous souhaitez toujours "mettre à jour" sans changement *, vous devez supprimer ces modules du node_modulesdossier.

par exemple supprimer node_modules/react-google-maps.

Enfin, exécutez à nouveau npm update --save.

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

N'oubliez pas de lancer npm update --save-devsi vous souhaitez mettre à jour les dépendances de développement.

Alexey Volodko
la source
1

Greenkeeper si vous utilisez Github. https://greenkeeper.io/

C'est une intégration Github et incroyablement facile à configurer. Une fois installé, il crée automatiquement des demandes d'extraction dans les référentiels que vous spécifiez (ou tous si vous le souhaitez) et maintient votre code toujours à jour, sans vous forcer à faire quoi que ce soit manuellement. Les PR doivent ensuite déclencher une génération sur un service CI et, en fonction d'une vérification réussie ou échouée, vous pouvez continuer à déterminer ce qui déclenche le problème ou quand le CI réussit simplement fusionner le PR.

greenkeeper PR 1 greenkeeper PR 2

En bas, vous pouvez voir que la première génération a échoué au début et après une validation ("mise à niveau vers le nœud v6.9"), les tests réussissent afin que je puisse enfin fusionner le PR. Livré avec beaucoup d'emoji aussi.

Une autre alternative serait https://dependencyci.com/ , mais je ne l'ai pas testé intensivement. Après un premier coup d'oeil, Greenkeeper a une meilleure apparence en général à l'OMI et a une meilleure intégration.

Luca Steeb
la source
1
  • npm obsolète
  • mise à jour npm

Devrait vous obtenir les dernières versions recherchées compatibles pour votre application. Mais pas les dernières versions.

webkitfanz
la source