npm vérifier et mettre à jour le package si nécessaire

471

Nous devons intégrer le lanceur de test Karma dans TeamCity et pour cela, je voudrais donner aux ingénieurs système un petit script (PowerShell ou autre) qui:

  1. récupérer le numéro de version souhaité dans un fichier de configuration (je suppose que je peux le mettre en commentaire directement dans le karma.conf.js)

  2. vérifier si la version définie de karma runner est installée dans le référentiel global de npm

  3. si ce n'est pas le cas, ou si la version installée est plus ancienne que souhaitée: choisissez et installez la bonne version

  4. exécuter: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

Donc ma vraie question est: "comment peut-on archiver un script, si la version souhaitée du package est installée?". Devriez-vous faire le contrôle, ou est-il sûr d'appeler à npm -g installchaque fois?

Je ne veux pas toujours vérifier et installer la dernière version disponible, car d'autres valeurs de configuration peuvent devenir incompatibles

iLemming
la source

Réponses:

609

Pour vérifier si un module d'un projet est «ancien»:

npm outdated

' obsolète ' vérifiera chaque module défini dans package.jsonet verra s'il existe une version plus récente dans le registre NPM.

Par exemple, disons xml2js 0.2.6(situé dans node_modulesle projet actuel) est obsolète car une version plus récente existe (0.2.7). Tu verrais:

xml2js@0.2.7 node_modules/xml2js current=0.2.6

Pour mettre à jour toutes les dépendances, si vous êtes sûr que cela est souhaitable:

npm update

Ou, pour mettre à jour une seule dépendance telle que xml2js:

npm update xml2js
dublx
la source
6
Attention à npm updatesurtout avec npm update -g... ça ne fait pas ce que la plupart des peaole attendent de lui! Voir: github.com/npm/npm/issues/6247 et gist.github.com/othiym23/4ac31155da23962afd0e
jbandi
6
@jbandi À partir de [email protected], il npm -g updateest sûr de l'utiliser à nouveau. github.com/npm/npm/issues/6247#issuecomment-92182814
Chuck Le Butt
7
Veuillez noter que la mise à jour npm ne mettra pas à jour votre fichier package.json comme indiqué par la réponse de @Erik Olson.
Ehtesham Hasan du
5
As of [email protected], 'npm update' will change package.json to save the new version as the minimum required dependency docs.npmjs.com/cli/update.html
Sidney
368

npm outdatedidentifiera les packages qui doivent être mis à jour et npm update <package name>peut être utilisé pour mettre à jour chaque package. Mais avant [email protected], npm update <package name>ne mettra pas à jour les versions de votre package.json, ce qui est un problème.

Le meilleur flux de travail consiste à:

  1. Identifier les packages obsolètes
  2. Mettez à jour les versions dans votre package.json
  3. Exécutez npm updatepour installer les dernières versions de chaque package

Consultez npm-check-updatespour aider avec ce flux de travail.

  • Installez npm-check-updates
  • Exécuter npm-check-updatespour répertorier les packages obsolètes (essentiellement la même chose que l'exécution npm outdated)
  • Exécutez npm-check-updates -upour mettre à jour toutes les versions de votre package.json (c'est la sauce magique)
  • Exécutez npm updatecomme d'habitude pour installer les nouvelles versions de vos packages en fonction du package mis à jour.json
Erik Olson
la source
3
npm outdatedaffichera TOUS les packages .. même à l'intérieur d'autres packages .. mais ceux-ci ne seront pas mis à jour avec cette procédure donc ils apparaîtront toujours .. alors utilisez simplement npm-check-updates(comme vous l'avez réellement recommandé) qui n'affiche que les packages principaux de package.json...
davidhq
Avec le fil, il est beaucoup plus facile de taper «mise à niveau du fil».
Christopher Grigg
17
Pourquoi dois-je installer un gestionnaire de mise à jour pour gérer mon gestionnaire de packages? Ne sommes-nous pas d'accord pour dire que c'est idiot? Cela devrait être aussi simple que npm install --all-outdatedça ne l'est pas ...
ADJenks
3
Vous pouvez toujours exécuter npm update --save package_namepour enregistrer la dernière modification dans package.json.
trungk18
Erik, pouvez-vous bien vouloir répondre à cette question SO connexe , car cela me dérange encore un peu la différence entre les deux commandes, c'est-à-dire npm updatevs npm-check-updates?
João Pimentel Ferreira
146

Il existe également un module "frais" appelé npm-check:

npm-check

Vérifiez les dépendances obsolètes, incorrectes et inutilisées.

entrez la description de l'image ici

Il fournit également un moyen interactif pratique de mettre à jour les dépendances.

alecxe
la source
78

Une étape simple:

$ npm i -g npm-check-updates && ncu -u && npm i

C'est tout. Toutes les versions du package package.jsonseront les dernières versions majeures.

Éditer:

Que se passe-t-il ici?

  1. Installation d'un package qui vérifie les mises à jour pour vous.

  2. Utilisez ce package pour mettre à jour toutes les versions de package dans votre package.json(-u est l'abréviation de --updateAll).

  3. Installez toutes les nouvelles versions des packages.

Mat
la source
3
@imnickvaughn ncusignifie node-check-updates et -aest l'option 'upgradeAll'. Retrouvez toutes les options ici: npmjs.com/package/npm-check-updates
Arian Acosta
Et si je veux le faire sur une ligne sans utiliser un autre package comme ncu?
ADJenks
Ou sans l'installation globale,npx -p npm-check-updates ncu -u
entozoon le
68
  • Pour mettre à jour un seul package local:

    1. Découvrez d'abord vos packages obsolètes:

      npm outdated

    2. Mettez ensuite à jour manuellement le ou les packages souhaités en tant que:

      npm update --save package_name

De cette façon, il n'est pas nécessaire de mettre à jour votre package.json fichier local .

Notez que cela mettra à jour votre package vers la dernière version.

  • Si vous écrivez une version dans votre package.jsonfichier et faites:

    npm update package_name

    Dans ce cas, vous obtiendrez uniquement la prochaine version stable (souhaitée) concernant la version que vous avez écrite dans votre package.jsonfichier.

Et avec npm list (package_name)vous, découvrez la version actuelle de vos packages locaux.

Horloger
la source
14

Commandes NPM pour mettre à jour ou corriger les vulnérabilités de certains fichiers manifestes de dépendance

  • Utilisez la commande ci-dessous pour vérifier les vulnérabilités obsolètes ou dans vos modules de nœuds.

    npm audit

  • Si des vulnérabilités sont détectées, utilisez la commande ci-dessous pour résoudre tous les problèmes.

    npm audit fix

  • Si cela ne fonctionne pas pour vous, essayez

    npm audit fix -f, cette commande corrigera presque toutes les vulnérabilités. Certaines dépendances ou devDependencies sont verrouillées dans le fichier package-lock.json , nous utilisons donc l' -findicateur pour forcer leur mise à jour.

  • Si vous ne souhaitez pas utiliser le correctif d'audit forcé, vous pouvez corriger manuellement vos versions de dépendances en les modifiant dans les fichiers package-lock.json et package.json . Ensuite, exécutez

npm update && npm upgrade

Smit Patel
la source
10

Pas de packages supplémentaires, pour simplement vérifier les obsolètes et mettre à jour ceux qui le sont, cette commande fera:

npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)

MikeMajara
la source
Bon gars, merci!
drKreso
C'est une excellente réponse car elle peut être placée dans n'importe quel script shell pour automatiser cette étape sans avoir besoin d'installer un autre package.
Jankapunkt
4

Lors de l'installation de packages npm (globalement ou localement), vous pouvez définir une version spécifique en utilisant la @versionsyntaxe pour définir une version à installer.

En d'autres termes, faire: npm install -g [email protected] garantira que seulement 0.9.2 est installé et ne réinstallera pas s'il existe déjà.

En guise de conseil, je suggère d'éviter les installations globales de npm partout où vous le pouvez. Beaucoup de gens ne réalisent pas que si une dépendance définit un fichier bin, il est installé dans ./node_modules/.bin/. Souvent, il est très facile d'utiliser cette version locale d'un module installé qui est définie dans votre package.json. En fait, les scripts npm ajouteront le ./node_modules/.bin sur votre chemin.

À titre d'exemple, voici un package.json qui, lorsque j'exécuterai, npm install && npm testinstallera la version de karma définie dans mon package.json et utilisera cette version de karma (installée dans node_modules / .bin / karma) lors de l'exécution du testscript:

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

Cela vous donne l'avantage de votre package.json définissant la version de karma à utiliser et de ne pas avoir à conserver cette configuration globalement sur votre boîte CI.

addisonj
la source
que contient le testscript? Pouvez-vous s'il vous plaît me donner un indice sur la façon dont vous l'installez avec un script.
iLemming
1
Regardez le package.json. Sous la propriété "scripts", vous pouvez définir une autre propriété, "test" dont la valeur est une commande que vous souhaitez exécuter lorsque vous tapez npm test. les documents npm sont plutôt bons ici: npmjs.org/doc/scripts.html
addisonj
4

Depuis [email protected]+, vous pouvez simplement faire:

npm update <package name>

Cela mettra automatiquement à jour le package.jsonfichier. Nous n'avons pas besoin de mettre à jour la dernière version manuellement, puis d'utilisernpm update <package name>

Vous pouvez toujours obtenir l'ancien comportement en utilisant

npm update --no-save

( Référence )

adiga
la source
1

Pour vraiment mettre à jour un seul package, installez NCU, puis exécutez-le uniquement pour ce package. Cela reviendra à la vraie dernière.

npm install -g npm-check-updates

ncu -f your-intended-package-name -u
regisbsb
la source
6
Poste de faible qualité, une meilleure explication aiderait.
linuxfan dit Réintégrer Monica