javascript npm - Comment puis-je mettre à jour chaque dépendance dans package.json à la dernière version?




update npm-check-updates (24)

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

voir npm-check-updates

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

J'ai copié package.json d'un autre projet et je veux maintenant passer toutes les dépendances à leurs dernières versions car c'est un nouveau projet et ça ne me dérange pas de réparer quelque chose si ça casse.

Quelle est la meilleure façon de faire cela?

La meilleure façon dont je sais maintenant est de lancer la npm info express version puis de mettre à jour package.json manuellement pour chacun d'entre eux. 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"
  }
}

Je suis maintenant un collaborateur sur npm-check-updates , ce qui est une excellente solution à ce problème.


Le seul inconvénient que j'ai trouvé avec la meilleure réponse ci-dessus est qu'il met à jour les modules à la dernière version. Cela signifie qu'il pourrait être mis à jour vers 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 indiqué plus haut: installez et exécutez avec ceci:

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

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

C'est une intégration Github et incroyablement facile à mettre en place. 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 conserve votre code toujours à jour, sans vous forcer à faire quoi que ce soit manuellement. Les PR devraient alors déclencher une construction 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 lorsque CI réussit simplement à fusionner le PR.

En bas, vous pouvez voir que la première version a échoué au début et après une validation ("upgrade to node v6.9"), les tests sont passés pour 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 regard, Greenkeeper semble mieux en général IMO et a une meilleure intégration.


On dirait que npm-check-updates est 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 . ( Note: 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 contondant de la mise à jour des dépendances. C'est bien si, comme vous l'avez dit, le projet est vide et que rien ne peut 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 à jour.

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


Cela fonctionne à partir de npm 1.3.15.

"dependencies": {
  "foo": "latest"
}

J'aime vraiment comment fonctionne npm-upgrade . C'est un simple utilitaire de ligne de commande qui passe en revue 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 de npm-upgade à la racine de votre projet:

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


Voici une regex de base pour faire correspondre les numéros de version sémantique 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.

Entrez l'expression rationnelle ci-dessus et vérifiez qu'elle correspond au texte correct.

Remplacez toutes les correspondances par un astérisque.

Exécuter la npm update --save


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

npm outdated

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

npm install [email protected] --save

Par exemple:

Mon fichier package.json a une dépendance:

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

alors je devrais écrire:

npm install @progress/[email protected] --save

Une étape facile:

$ npm install -g npm-check-updates && ncu -a && npm i

Les commandes ci-dessus ne sont pas sécurisées car vous risquez de casser votre module lorsque vous changez de version. Au lieu de cela, je recommande ce qui suit

  • Définissez la version actuelle des modules de nœuds actuels dans package.json à l'aide de la commande npm shrinkwrap .
  • Mettez à jour chaque dépendance à la dernière version SI ELLE NE BRISSE PAS VOS TESTS en utilisant l'outil de ligne de commande https://github.com/bahmutov/next-update
npm install -g next-update
// from your package
next-update

C'est ce que j'ai fait pour mettre à jour toutes les dépendances dans package.json au plus tard:

npm install -g npm-check-updates
ncu -u --packageFile package.json 

Ncu est un nouvel alias pour vérifier les mises à jour. Ce faisant, vous n'avez pas à mettre à jour manuellement les numéros de version dans package.json ncu le fait pour vous. Suivez la méthode ci-dessous si vous êtes sur une machine Linux

sudo npm i -g npm-check-updates
// decide between -u or -a
ncu -u, --upgrade and overwrite package file
ncu -a, --upgradeAll include even those dependencies whose latest 
          version satisfies the declared server dependency
sudo npm install

J'utilise npm-check pour archiver ça.

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

Une autre liste de commande 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

Pour mettre à jour une dépendance à sa dernière version sans devoir ouvrir manuellement le package.json et le modifier, vous pouvez exécuter

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

c'est à dire

npm install [email protected]* --save

Pour référence, npm-install

Comme noté par l'utilisateur Vespakoen sur une modification rejetée, il est également possible de mettre à jour plusieurs paquets à la fois de cette façon:

npm install --save [email protected]* [email protected]* [email protected]*

Il apporte également un one-liner pour le shell basé sur npm outdated . Voir l'édition pour le code et l'explication.

PS: Je déteste aussi avoir à modifier manuellement package.json pour des choses comme ça;)


TLDR; (mis à jour pour les versions plus récentes de NPM)

Les choses ont un peu changé depuis que ces réponses ont été écrites à l'origine.

npm 2+: npm outdated + npm update npm shrinkwrap + npm shrinkwrap

NPM plus ancien: package npm-check-updates + npm shrinkwrap

Soyez sûr de rétrécir vos dossiers, ou vous pouvez vous retrouver avec un projet mort. J'ai sorti un projet l'autre jour et il ne fonctionnerait pas parce que mes dossiers étaient tous désuets / mis à jour / un désordre. Si j'avais rétracté, npm aurait installé exactement ce dont j'avais besoin.

Détails

Pour les curieux qui se rendent aussi loin, voici ce que je recommande:

Utilisez npm-check-updates ou npm outdated pour 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 eu quelques avertissements de dépendance)

$ rm -rf node_modules
$ npm install 

Enfin, sauvegardez les versions exactes dans npm-shrinkwrap.json avec npm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Maintenant, l' npm install va maintenant utiliser les versions exactes dans npm-shrinkwrap.json

Si vous vérifiez npm-shrinkwrap.json dans 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).


S'il vous arrive d'utiliser Visual Studio Code comme IDE, c'est une petite extension amusante pour faire de la mise à jour de package.json un processus en un clic.

Lentille de version


  1. Utilisez * comme version pour les dernières versions, y compris unstable
  2. Utiliser le latest tant que définition de version pour la dernière version stable
  3. Modifiez le package.json avec le dernier numéro de version stable en utilisant 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"
},

Le code suivant (qui a été accepté) m'a écrit quelque chose comme "ça prend trop de temps bla-bla" et n'a rien fait. Probablement en utilisant le drapeau mondial était 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 (beaucoup plus longue) à partir des dépendances dev de mon package.json dans 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 mis le mode de recherche à l'expression régulière, utilisé le motif ^\s*"([^"]+)".*$ Pour obtenir le nom du paquet et l' npm uninstall \1 --save-dev \nnpm install \1 --save-dev remplacé par npm uninstall \1 --save-dev \nnpm install \1 --save-dev Cliquez sur "replace all".

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 copié à bash et appuyez sur Entrée. Tout a été amélioré et fonctionne 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, puisque vous devez le faire seulement de temps en temps, mais vous pouvez facilement écrire un script, qui analyse le paquetage.json et met à jour vos paquets. Je pense que c'est mieux comme ça, parce que vous pouvez éditer votre liste si vous avez besoin de quelque chose de spécial, par exemple garder la version actuelle d'une lib.


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

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


Solution sans paquets supplémentaires

Changez la version de chaque dépendance en * :

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

Ensuite, exécutez npm update --save .

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

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

C'est la partie difficile, cela signifie que votre version locale de "réagir" était inférieure à la plus récente. Dans ce cas, npm téléchargé et mis à jour "réagir" paquet. Cependant, votre version locale de "réagir-google-maps" est la même que la plus récente.

Si vous voulez toujours "mettre à jour" inchangé * , vous devez supprimer ces modules du dossier node_modules .

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 d'exécuter npm update --save-dev si vous voulez mettre à jour les dépendances de développement.


Essayez la commande suivante si vous utilisez npm 5 et node 8

mise à jour de npm --save


Une réponse très tardive. mais peut aider quelqu'un.

cette fonctionnalité a été introduite dans npm v5 . mise à jour vers npm en utilisant npm install -g [email protected] et

mettre à jour package.json

  1. delete /node_modules et package-lock.json (if you have any)

  2. Exécuter la npm update . Cela mettra à jour package.json avec la dernière version avec les dépendances installées.

mettre à jour à la dernière version. vous pouvez aller avec npm-check-updates


L'alternative est

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

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


Si vous devez installer une ancienne version d'un paquet, spécifiez-le

npm install <package>@<version>

Par exemple: npm install [email protected]

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

La commande d' install 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 la npm view peut être utilisée pour voir d'autres choses sur un paquet aussi. https://docs.npmjs.com/cli/view







javascript node.js npm