web-dev-qa-db-fra.com

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

J'ai copié package.json à partir d'un autre projet et je souhaite maintenant remplacer toutes les dépendances par leurs dernières versions, car il s'agit d'un nouveau projet et je ne crains pas de réparer quelque chose qui ne fonctionne pas.

Quelle est la façon la plus simple de faire cela?

Le meilleur moyen que je connaisse maintenant est d’exécuter npm info express version, puis de mettre à jour package.json manuellement pour chacun d’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.

1629
Raine Revere

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 émoussé 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.

Par contre, si vous travaillez dans un projet plus mature, vous voudrez probablement vérifier qu’il n’ya pas de changements radicaux dans vos dépendances avant la mise à niveau.

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

1969
josh3736

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 
905
Etienne

TLDR; (mis à jour pour les nouvelles versions de NPM)

Les choses ont un peu changé depuis la rédaction de ces réponses.

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

Npm ancien: package npm-check-updates + npm shrinkwrap

Assurez-vous de réduire vos dépenses, sinon vous risquez de vous retrouver avec un projet mort. J'ai sorti un projet l'autre jour et il ne fonctionnait pas parce que mes collaborateurs étaient tous périmés/mis à jour/en désordre. Si j'avais rétréci, NPM aurait installé exactement ce dont j'avais besoin.


Détails

Pour les curieux qui vont si 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, effectuez une nouvelle installation (sans la machine, quelques avertissements de dépendance)

$ rm -rf node_modules
$ npm install 

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

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Maintenant, npm install utilisera maintenant les versions exactes dans npm-shrinkwrap.json

Si vous cochez npm-shrinkwrap.json dans git, toutes les installations utiliseront exactement les mêmes versions. 

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

331
Michael Cole

Pour mettre à jour la dépendance one à sa dernière version sans avoir à ouvrir manuellement le package.json et à le changer, vous pouvez exécuter

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

c'est à dire.

npm install express@* --save

Pour référence, npm-install


Comme noté par l'utilisateur Vespakoen sur une édition refusée, il est également possible de mettre à jour plusieurs paquets en même temps:

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

Il propose également une ligne unique pour Shell basée sur npm outdated. Voir l'édition pour le code et les explications.


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

171
laconbass

Si vous utilisez Visual Studio Code comme votre IDE, il s’agit d’une petite extension amusante pour faire de la mise à jour package.json un processus en un clic.

Version Lense

 enter image description here

70
GollyJer

Cela fonctionne à partir de npm 1.3.15.

"dependencies": {
  "foo": "latest"
}
55
Tobiasz Cudnik
  1. Utilisez * comme version des dernières versions, y compris unstable
  2. Utilisez latest comme définition de version pour la dernière version stable
  3. Modifiez le package.json avec exactement 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"
},
44
Mr. Sun Lin

La seule mise en garde que j'ai trouvée avec la meilleure réponse ci-dessus est qu'il met à jour les modules avec 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 l'utilisait et il fonctionnait efficacement en installant les mises à jour stables.

Comme Etienne a déclaré ci-dessus: installer et exécuter avec ceci:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
37
Tyler Davis

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

npm outdated

pour mettre à jour simplement one dependency, utilisez la commande suivante:

npm install yourPackage@latest --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/kendo-angular-dateinputs@latest --save
32
StepUp

J'aime vraiment comment npm-upgrade fonctionne. C'est un simple utilitaire de ligne de commande qui parcourt 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-upgrade à la racine de votre projet (à côté du fichier package.json):

 npm upgrade example

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

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

Ensuite, à partir de la racine d’un projet contenant un fichier package.json:

npm-upgrade
31
manncito

Voici une expression rationnelle de base correspondant aux 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.

 screenshot:select the text you want to replace

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

 screenshot:input the semver regex above

Remplacez toutes les correspondances par un astérisque.

 screenshot:replace package versions with an asterisk

Exécuter npm update --save

21
daniellmb

Cette fonctionnalité a été introduite dans npm v5. mettre à jour vers npm en utilisant npm install -g npm@latest et 

pour mettre à jour package.json 

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

  2. lancez npm update. cela mettra à jour les dépendances package.json à la dernière, en fonction de semver

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

14
Sibiraj

J'ai récemment eu à mettre à jour plusieurs projets utilisant 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 canaliser la sortie de npm outdated en json, vers jq
(jq est un outil d'analyse de requête en ligne de commande json)
(remarquez l'utilisation de l'argument --depth pour npm outdated)
jq enlèvera la sortie uniquement au nom du paquetage de niveau supérieur.
finally xargs met chaque LIBRARYNAME un à la fois dans une commande npm install LIBRARYNAME --save-dev

Ce qui précède est ce qui a fonctionné pour moi sur une machine:: Node = v0.11.10 osx = 10.9.2 npm = 1.3.24

cela nécessitait:
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: J'enregistre uniquement les bibliothèques mises à jour dans package.json à l'intérieur de la clé json devDependancies à l'aide de --save-dev. C'était une exigence de mes projets.

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

npm outdated --depth=0

De plus, vous pouvez vérifier les versions actuelles de la bibliothèque de toplevel installée avec

npm list --depth=0
13
andxyz

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

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

Pour vous donner un aperçu de ce qui vous attend, voici une capture d'écran (extraite de la page git pour npm-check):

 enter image description here

12
TWright

Updtr!

Sur la base de NPM périmé, 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

10
David Braun

J'utilise npm-check pour archiver cela.

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

 enter image description here

Une autre liste de commandes utile qui conservera 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
8
goksel

Commandes que j'ai dû utiliser pour mettre à jour package.json pour NPM 3.10.10:

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

Contexte:

J'utilisais la dernière commande de @ josh3736 mais mon package.json n'était pas mis à jour. J'ai ensuite remarqué le texte de description lors de l'exécution de npm-check-updates -u:

La dépendance suivante est satisfaite par sa plage de version déclarée, mais la version installée est en retard. Vous pouvez installer la dernière version version sans modifier votre fichier de package à l’aide de npm update. Si vous voulez quand même mettre à jour la dépendance dans votre fichier de package, exécutez ncu -une.

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 déclarée semver

ncu est un alias pour npm-check-updates, comme indiqué dans le message lors de la saisie de npm-check-updates -u:

[INFO]: You can also use ncu as an alias
8
Ogglas

npm-check-updates

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

npm-check-updates vous permet de mettre à jour vos dépendances package.json vers les dernières versions, quelles que soient les contraintes de version existantes.

$ npm install -g npm-check-updates

$ ncu -u

dépendances mises à jour! c'est tout!

8
аlex dykyі

Ncu est un nouvel alias pour vérifier les mises à jour. Ainsi, vous n'avez pas besoin de mettre à jour manuellement les numéros de version de votre package dans package.json 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
7
karthik006

Une étape facile:

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

Si vous utilisez yarn, yarn upgrade-interactive est un outil très élégant qui peut vous permettre d'afficher 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.

5
Yangshun Tay

Les commandes ci-dessus sont dangereuses car vous pourriez endommager votre module lors du changement de version ..__

  • Définissez la version actuelle des modules de nœud actuels dans package.json à l'aide de la commande npm shrinkwrap.
  • Mettez à jour chaque dépendance à la dernière version SI CELA NE BRISE PAS LES TESTS avec https://github.com/bahmutov/next-update outil en ligne de commande
 npm install -g next-update
// à partir de votre paquet 
 next-update 
5
gleb bahmutov

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

npm update --save

4
krunal shah

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

yarn upgrade --latest

De leurs docs :

La commande upgrade --latest 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 mise à niveau des packages à travers les versions principales).

4
fotijr

À partir de la version 5.2.0 de npm, il est possible de l'exécuter sur une seule ligne sans installer de paquet supplémentaire dans votre registre global npm ni localement dans votre application. Pour ce faire, utilisez le nouvel utilitaire npx 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
4
ilyakam

Alternative est

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

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

3
Haven

Le code suivant (qui a été accepté) m'a écrit quelque chose du type "ça prend trop de bla-bla" et n'a rien fait. Utiliser le 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.

J'ai copié une liste comme celle-ci (beaucoup plus longue) 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",

Je mets le mode de recherche sur expression régulière, utilise le modèle ^\s*"([^"]+)".*$ pour obtenir le nom du paquet et le remplace par npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Cliqué sur "remplacer tout". Le problème était le suivant:

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, car vous devez le faire seulement de temps en temps, mais vous pouvez facilement écrire un script qui analyse le package.json et met à jour vos paquets. Je pense que c'est mieux ainsi, car vous pouvez éditer votre liste si vous avez besoin de quelque chose de spécial, par exemple garder la version actuelle d'une lib.

2
inf3rno

Solution sans paquets supplémentaires

Changez la version de chaque dépendance en *:

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

Puis lancez npm update --save.

Certains de vos paquets ont été mis à jour, mais pas tous?

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

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

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

par exemple. supprimer node_modules/react-google-maps.

Enfin relancez 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 souhaitez mettre à jour les dépendances de développement.

  • nPM obsolète 
  • npm update

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

2
webkitfanz

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 
2
Arpit

Si vous ne voulez pas installer global npm-check-updates , 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()))"
1
Yukulélé

J'ai résolu ce problème en consultant 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
1
Sunil

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 à jour en permanence, sans vous obliger à effectuer quoi que ce soit manuellement. Les RP doivent ensuite déclencher la création d’un service de CI et, en cas de réussite ou d’échec du contrôle, vous pouvez continuer à comprendre ce qui déclenche le problème ou lorsque l’IC passe, fusionnez simplement le PR.

 greenkeeper PR 1  greenkeeper PR 2

En bas, vous pouvez voir que la première construction a échoué au début et qu'après une validation ("mise à niveau vers le noeud v6.9"), les tests ont réussi 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é de manière intensive. Après un premier regard, Greenkeeper semble mieux dans l’OMI en général et a une meilleure intégration.

1
Luca Steeb

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. Exécuter npm-check-updates -u

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

1
miqrc

Pour ce faire, la méthode la plus simple consiste à utiliser pnpm plutôt que npm et à taper simplement:

pnpm update --latest

https://github.com/pnpm/pnpm/releases/tag/v3.2.0

0
Sumomo

Une mise à jour automatique est possible avec NPM-script:

{
    "_cmd-update-modules": "npm run devops-update-modules",
    "scripts": {
        "create-global-node-modules-folder": "if not exist \"%appdata%\\npm\\node_modules\" mkdir %appdata%\\npm\\node_modules",
        "npm-i-g": "npm i npm@latest -g",
        "npm-check-i-g": "npm i npm-check@latest -g",
        "eslint-i-g": "npm i eslint@latest -g",
        "npm-check-u-l": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -i lru-cache",
        "npm-check-u-g": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -g -i lru-cache",
        "npm-deep-update-l": "npm update --depth 9999 --dev",
        "npm-deep-update-g": "npm update --depth 9999 --dev -g",
        "npm-cache-clear": "npm cache clear --force",
        "devops-update-modules": "npm run create-global-node-modules-folder && npm run npm-i-g && npm run npm-check-i-g && npm run eslint-i-g && npm run npm-check-u-l && npm run npm-check-u-g && npm run npm-deep-update-l && npm run npm-deep-update-g && npm run npm-cache-clear"
    }
}

Pour plus de détails et un manuel étape par étape: https://stackoverflow.com/a/34295664/462347

0
Mike B.