Wie aktualisiere ich jede Abhängigkeit in package.json auf die neueste Version?

2011

Ich habe package.json aus einem anderen Projekt kopiert und möchte nun alle Abhängigkeiten auf die neuesten Versionen übertragen, da dies ein neues Projekt ist und es mir nichts ausmacht, etwas zu reparieren, wenn es kaputt geht.

Was ist der einfachste Weg, dies zu tun?

Der beste Weg, den ich jetzt kenne, besteht darin, npm info express versionpackage.json für jeden manuell auszuführen und dann zu aktualisieren. Es muss einen besseren Weg geben.

{
  "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"
  }
}

UPDATE 01.05.19 : Sechs Jahre später und ich pflege immer noch npm-check-Updates als umfassende Lösung für dieses Problem. Genießen!

Raine Revere
quelle
2
Schön, einen anderen Ansatz für dieses Problem zu sehen. Ich mag Salitas Ausgabe sehr. Einige nette Funktionen, zu denen ich jetzt beitrage, github.com/tjunnone/npm-check-updates, sind die Beibehaltung der Versionssemantik (wie 1.x oder> 2.1.0) und das Filtern nach name / regex / devDeps-only.
Raine Revere
1
Hier MUSS es bessere Antworten geben. Offensichtlich können Sie mit der Abhängigkeitsauflösung nicht immer die neueste Version von allem haben. Das Maximieren der meisten neuesten Versionen von Modulen ist genau das, eine Art Optimierungsproblem. NPM weiß jedoch nicht, welche Module Sie aktuell sein möchten, mehr als andere. Es wäre cool, wenn es so etwas gäbe: npm update --latest xyz, wobei xyz die Module sind, die Sie so aktuell wie möglich halten möchten, und alle anderen Module mit ihrer neuesten kompatiblen Version folgen.
Alexander Mills
2
npm behandelt Versionskonflikte zwischen gemeinsam genutzten Abhängigkeiten korrekt, indem für jede die richtige heruntergeladen wird. Wenn also Dep A von Dep C v1.0.0 und Dep B von Dep C v2.0.0 abhängt, werden sie jeweils entsprechend installiert und verwendet. Daher können Sie die neuesten Pakete installieren, die Sie möchten.
Raine Revere
Versuchen Sie dies, um ein Upgrade zu erzwingen:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
Miorey
Ich überprüfe immer diese Antwort. Aber ich sehe, dass es in den Google-Ergebnissen gerutscht ist. Hoffentlich hilft dieser Kommentar dabei, die Relevanz wieder zu erhöhen !!
Zach Smith

Antworten:

2391

Es sieht so aus, als ob npm-check-updates der einzige Weg ist, dies jetzt zu erreichen.

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

Am npm <3.11:

Ändern Sie einfach die Version jeder Abhängigkeit in *und führen Sie sie aus npm update --save. ( Hinweis: In neueren (3.11) Versionen von npm defekt ).

Vor:

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

Nach:

  "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"
  }

Dies ist natürlich der Hammer beim Aktualisieren von Abhängigkeiten. Es ist in Ordnung, wenn - wie Sie sagten - das Projekt leer ist und nichts kaputt gehen kann.

Wenn Sie jedoch in einem ausgereifteren Projekt arbeiten, möchten Sie wahrscheinlich vor dem Upgrade überprüfen, ob Ihre Abhängigkeiten keine wesentlichen Änderungen aufweisen.

Um zu sehen, welche Module veraltet sind, führen Sie sie einfach aus npm outdated. Es werden alle installierten Abhängigkeiten aufgelistet, für die neuere Versionen verfügbar sind.

josh3736
quelle
13
@thefourtheye: Sie sollten in der Regel nicht verlassen * in package.json da Sie könnten am Ende automatisch eine neue Modul Version installieren mit Änderungen zu brechen , die Ihre App brechen. Da wir --savehier verwenden, wird das *durch die aktuelle Version jedes Pakets ersetzt.
Josh3736
50
Ich kann das nicht zum Laufen bringen. Hat sich mit npm etwas geändert, seit diese Antwort veröffentlicht wurde? Wenn ich den Platzhalter benutze und dann npm install --saveder Platzhalter in meinem verbleibt package.json.
Davidtheclark
15
Leider updatefunktioniert die Verwendung für mich auch nicht. Ich habe immer noch die Wildcards. Gibt es eine Dokumentation darüber, die Sie kennen, oder andere Ressourcen, die ich mir ansehen könnte?
Davidtheclark
120
Ein bisschen alt, aber das könnte anderen Leuten helfen: github.com/tjunnone/npm-check-updates | Verwenden Sie diese Option npm install -g npm-check-updates, um zu installieren, um npm-check-updateszu überprüfen, ob Ihre Abhängigkeiten aktualisiert wurden, und npm-check-updates -uum Ihre package.json-Versionen zu aktualisieren. Dann ist es einfach npm installund es werden neue Versionen heruntergeladen.
RaphaelDDL
5
Ihr Problem ist wahrscheinlich darauf zurückzuführen, dass Sie versuchen, Entwicklungspakete zu aktualisieren, indem Sie npm update --savestatt eingeben npm update --save-dev.
Adriendenat
1035

npm-check-updates ist ein Dienstprogramm, das eine package.json automatisch mit der neuesten Version aller Abhängigkeiten anpasst

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

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

[BEARBEITEN] Eine etwas weniger aufdringliche Methode (vermeidet eine globale Installation), wenn Sie eine moderne Version von haben, npmist:

$ npx npm-check-updates -u
$ npm install 
Etienne
quelle
135
Dies sollte nativ über den Befehl npm selbst verfügbar sein, in der Tat die bisher beste Lösung, um die Abhängigkeiten zu aktualisieren.
Mohammad Arif
7
Sollte nativ Teil von npm sein, stimme voll und ganz zu. Dies ist jedoch nicht der Fall, und diese Lösung ist ein Kinderspiel. Vielen Dank.
Stefan
2
Ich nehme an, Sie Jungs drücken [HARD], um dies in den Kern npm zu bekommen?
Enorl76
3
@Batman Ja, wenn Sie vorher nicht installiert haben. Verwenden Sie andernfalls das npm-Update. ncu aktualisiert nur package.json. 'Node_modules' wird nicht installiert oder aktualisiert.
Muzaffer
1
nutzloses Paket, das nur einen Teil der Pakete mit ncu -aaktualisiert, nicht auch package.json.
Alexander Kim
385

Aktualisiert für den neuesten NPM

npm 2+ (Knoten 0,12+):


npm outdated
npm update
git commit package-lock.json

Altes npm (circa 2014):

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

Stellen Sie sicher, dass Sie Ihre Deps schrumpfen, da Sie sonst möglicherweise ein totes Projekt haben. Ich habe neulich ein Projekt herausgezogen und es lief nicht, weil meine Deps alle veraltet / aktualisiert / durcheinander waren. Wenn ich eingeschrumpft wäre, hätte npm genau das installiert, was ich brauchte.


Einzelheiten

Für die Neugierigen, die es so weit schaffen, empfehle ich Folgendes:

Verwenden Sie npm-check-updatesoder npm outdated, um die neuesten Versionen vorzuschlagen.

# `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

Führen Sie dann eine Neuinstallation durch (ohne die rm habe ich einige Abhängigkeitswarnungen erhalten)

$ rm -rf node_modules
$ npm install 

Zuletzt speichern Sie genaue Versionen npm-shrinkwrap.jsonmitnpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Jetzt npm installwerden jetzt genaue Versionen in verwendetnpm-shrinkwrap.json

Wenn Sie npm-shrinkwrap.jsonin git einchecken , verwenden alle Installationen genau die gleichen Versionen.

Dies ist ein Weg, um von der Entwicklung (alle Updates, die ganze Zeit) zur Produktion überzugehen (niemand berührt nichts).

ps Yarn sendet Ihre Paketliste an Facebook .

Michael Cole
quelle
13
Dies ist die richtige Antwort. Mit Dutzenden von installierten Deps ist dies definitiv ein besserer Weg
Angel S. Moreno
6
Erfahrungsgemäß kann der Rat, immer alle Pakete gleichzeitig zu aktualisieren, gefährlich sein.
Alphadogg
1
Sicher. Wenn Sie einen npm-shrinkwrap.jsonQuellcode erstellen und festschreiben und ihn bei jedem Update festschreiben, können Sie jederzeit zu Ihrem ursprünglichen Standort zurückkehren. Ich habe die Shrinkwrap-Funktion übersehen, als ich angefangen habe.
Michael Cole
21
dies ist nicht die Frage beantworten. Die Frage ist, wie die neueste Version aktualisiert werden kann . npm updateNur Updates auf die Semver-Version, nicht die neueste.
Gman
1
Können Sie antworten, ob es eine Alternative zu gibt yarn upgrade package@version?
Ben Sinclair
201

Um eine Abhängigkeit auf die neueste Version zu aktualisieren, ohne die manuell öffnen package.jsonund ändern zu müssen, können Sie sie ausführen

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

dh

npm install express@* --save

Als Referenz npm-install


Wie der Benutzer Vespakoen bei einer abgelehnten Bearbeitung festgestellt hat, ist es auch möglich, mehrere Pakete gleichzeitig auf folgende Weise zu aktualisieren:

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

Er sortiert auch einen Einzeiler für die Schale basierend auf npm outdated. Code und Erklärungen finden Sie in der Bearbeitung .


PS: Ich hasse es auch, für solche package.jsonDinge manuell bearbeiten zu müssen ;)

Laconbass
quelle
8
Diese Lösung ist großartig. Schnelle und einfache Möglichkeit, ein einzelnes Paket explizit auf die neueste Version zu aktualisieren, ohne neue Module zu installieren. Ich mag npm-check-Updates, aber afaik versucht es, alle Pakete auf dem neuesten Stand zu halten , was nicht immer das ist, was Sie wollen.
Chev
das funktioniert nicht für michnpm install react-native-image-picker@* --save
Harry Moreno
1
@Chev: ncu kann problemlos auf ein oder mehrere Pakete mit abzielen ncu express mocha chai. Sie können Pakete auch mit ausschließen ncu -x mocha. Ich bin damit einverstanden, dass das oben Genannte die einfachste Lösung für die Aktualisierung eines einzelnen Pakets ist.
Raine Revere
2
Ich habe gerade etwas Ähnliches verwendet, das funktioniert hat, aus möglicherweise neueren Dokumenten ... verwendet "neueste" anstelle von "*"npm install {package-name}@latest {save flags}
Drew Thomas
1
Vielen Dank, diese Lösung ist großartig und genau das, wonach ich suche. Sie können ein bestimmtes Paket aktualisieren, ohne jede andere Abhängigkeit aktualisieren zu müssen, was zu unvorhergesehenen Problemen führen kann!
Dany Wehbe
90

Wenn Sie Visual Studio Code als IDE verwenden, ist dies eine lustige kleine Erweiterung, um die Aktualisierung mit package.jsoneinem Klick durchzuführen.

Versionslinse

Geben Sie hier die Bildbeschreibung ein

GollyJer
quelle
2
Hier gibt es eine großartige Version von Text 3: github.com/yavorsky/Bump , wenn auch etwas langsam.
Alexander Kim
4
Funktioniert wunderbar, falls es niemandem klar ist, vergleicht dies einfach die Versionen in Ihrer package.json mit den neuesten npm-Repository-Versionen und ermöglicht es Ihnen, auf eine Version zu klicken, um den Textinhalt in Ihrer package.json zu aktualisieren. Sie müssen dann "npm update" ausführen, um npm anzuweisen, die neuen Versionen zu installieren.
MattG
2
Beachten Sie, dass es bereits möglich ist, die neueste Version der Paketabhängigkeiten mit einer kurzen Beschreibung im integrierten Visual Studio-Code
anzuzeigen,
1
Beachten Sie, dass Pakete nicht automatisch installiert werden, wenn Sie auf einen Code-Objektiv-Link klicken! Es aktualisiert einfach den Versionstext von package.json.
RA.
59

Dies funktioniert ab npm 1.3.15.

"dependencies": {
  "foo": "latest"
}
Tobiasz Cudnik
quelle
10
Gut zu wissen. Ich vermute, dass dies auf jeder Produktionsstätte im Allgemeinen eine schlechte Praxis ist, da es automatisch auf möglicherweise abwärtskompatible Versionen aktualisiert wird. Die Syntax '~ 2' sperrt Sie in eine bestimmte Hauptversionsnummer, die nach dem Semver abwärtskompatibel ist.
Raine Revere
1
Sie können die Deps immer auf dem Produkt einfrieren. Dafür gibt es einen Befehl. -2 klingt ok.
Tobiasz Cudnik
5
Ich benutze dies gerne zusammen mit npm shrinkwrap, um Deps einzufrieren.
Daniellmb
Wenn wir dies tun, woher kennen wir dann die tatsächliche Version dieses Pakets? Angenommen, ich hatte einen Eintrag namens "react": "16.9.0"und dann habe ich ihn zuletzt hinzugefügt und ausgeführt. npm iWie finde ich danach, welche Version von reag jetzt in meinem Projekt ist? da "react":"latest"ist was in meiner package.json übrig ist, auch nach mir noch keine npm i
nummer
52
  1. Verwenden * als Version für die neuesten Versionen, einschließlich instabil
  2. Verwenden latest als Versionsdefinition für die aktuelle stabile Version
  3. Ändern Sie die Datei package.json mit genau der neuesten stabilen Versionsnummer mit LatestStablePackages

Hier ist ein Beispiel:

"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"
},
Herr Sun Lin
quelle
2
Dies ist die beste Antwort.
Peza
1
Dies sollte die akzeptierte Antwort gewesen sein
EigenFool
immer noch der sicherste Ansatz. Gute Antwort.
Klewis
43

Die einzige Einschränkung, die ich mit der besten Antwort oben gefunden habe, ist, dass die Module auf die neueste Version aktualisiert werden. Dies bedeutet, dass es auf einen instabilen Alpha-Build aktualisiert werden kann.

Ich würde dieses Dienstprogramm npm-check-updates verwenden. Meine Gruppe hat dieses Tool verwendet und es hat effektiv funktioniert, indem sie die stabilen Updates installiert hat.

Wie oben von Etienne angegeben: Installieren und ausführen Sie damit:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 
Tyler Davis
quelle
3
rm -rf node_modulesbevor npm installich einige Abhängigkeitswarnungen für mich losgeworden bin.
Michael Cole
1
Nur für den Fall, dass Sie "*" in package.json haben, ändern Sie es einfach in "0" oder "0.0" oder "0.0.0", bevor Sie npm-check-updates ausführen.
Igorpavlov
Dies ist der einfachste Weg, dies zu tun. Kein Ärger, kein Rasseln. Klappt wunderbar. Alle Ihre Deps werden aktualisiert und ordnungsgemäß installiert. Thx
Yoraco Gonzales
38

Verwenden Sie den folgenden Befehl, um festzustellen, für welche Pakete neuere Versionen verfügbar sind:

npm outdated

Um nur eine Abhängigkeit zu aktualisieren, verwenden Sie einfach den folgenden Befehl:

npm install yourPackage@latest --save

Zum Beispiel:

Meine package.jsonDatei hat Abhängigkeit:

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

dann sollte ich schreiben:

npm install @progress/kendo-angular-dateinputs@latest --save
StepUp
quelle
Schön, aber es sieht so aus, als ob --save (oder --save-dev) für das Update nicht obligatorisch ist.
Burrich
35

Mir gefällt sehr gut, wie npm-upgrade funktioniert. Es ist ein einfaches Befehlszeilenprogramm, das alle Ihre Abhängigkeiten durchläuft und es Ihnen ermöglicht, die aktuelle Version im Vergleich zur neuesten Version anzuzeigen und bei Bedarf zu aktualisieren.

Hier ist ein Screenshot dessen, was passiert, nachdem es npm-upgradeim Stammverzeichnis Ihres Projekts (neben der package.jsonDatei) ausgeführt wurde:

Beispiel für ein npm-Upgrade

Für jede Abhängigkeit können Sie ein Upgrade durchführen, ignorieren, das Änderungsprotokoll anzeigen oder den Vorgang beenden. Für mich hat es bisher super geklappt.

BEARBEITEN: Um klar zu sein, ist dies ein Paket eines Drittanbieters, das installiert werden muss, bevor der Befehl funktioniert. Es kommt nicht mit npm selbst:

npm install -g npm-upgrade

Dann aus dem Stammverzeichnis eines Projekts mit einer package.json-Datei:

npm-upgrade
Manncito
quelle
Wenn man sich die Dokumente
ansieht,
2
Ja, gerade gegenüber anderen erwähnt. Keine Beschwerde gegen die Antwort :)
Martin Schneider
2
Hmm, npm-upgradehat bei mir nicht funktioniert, aber npm upgradees hat meine package.json-Datei aktualisiert, die genau das war, wonach ich gesucht habe.
Grandizer
Hmm interessant, gab es einen Fehler? Die Idee hinter der Verwendung npm-upgradeist, dass Sie genau sehen, was aktualisiert wird, und auswählen, welche aktualisiert werden sollen. npm upgrademag für die meisten Leute gut funktionieren, aber manchmal müssen Sie beim Upgrade etwas mehr Kontrolle haben.
Manncito
1
Sie können dies auch mit npx verwenden: npx npm-upgrade- ziemlich cool! :)
Röntgen
22

Hier ist ein grundlegender regulärer Ausdruck, der mit semantischen Versionsnummern übereinstimmt, damit Sie alle schnell durch ein Sternchen ersetzen können.

Semantische Version Regex

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

Wie benutzt man

Wählen Sie in der JSON-Datei die Paketversionen aus, die Sie ersetzen möchten.

Screenshot: Wählen Sie den Text aus, den Sie ersetzen möchten

Geben Sie den obigen regulären Ausdruck ein und überprüfen Sie, ob er mit dem richtigen Text übereinstimmt.

Screenshot: Geben Sie den obigen Semver-Regex ein

Ersetzen Sie alle Übereinstimmungen durch ein Sternchen.

Screenshot: Ersetzen Sie die Paketversionen durch ein Sternchen

Lauf npm update --save

daniellmb
quelle
funktioniert nicht, wenn ein Paketname eine Nummer enthält. dh: babel-preset-es2015, babel-preset-stage-0, hex2rgba. Vielleicht suchen Sie am Anfang nach Zitat / Doppelzitat:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
Rofrol
1
In jedem Editor, der mehrere Carets unterstützt (ej Sublime Text), können Sie das erste auswählen :und ctrl+dmehrmals drücken, bis Sie alle ausgewählt haben. Gehen Sie dann zur Versionsnummer (drücken Sie zweimal auf den Pfeil nach rechts) und drücken Sie die Strg-Taste, und schreiben Sie dann"*"
Ivan Castellanos
15

Ich musste kürzlich mehrere Projekte aktualisieren, die npm und package.json für ihre Magie gruntfile.js verwendeten. Der folgende Bash-Befehl (mehrzeiliger Befehl) hat bei mir gut funktioniert:

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

Die Idee hier: Um die npm outdatedAusgabe als json jq
weiterzuleiten, wird (jq ist ein json-Befehlszeilen-Parser / Abfragetool)
(beachten Sie die Verwendung des --depthArguments für npm outdated)
jq die Ausgabe nur auf den Paketnamen der obersten Ebene reduzieren.
Schließlich setzt xargs jeden LIBRARYNAME einzeln in einnpm install LIBRARYNAME --save-dev Befehl ein

Das Obige hat bei mir auf einem laufenden Computer funktioniert: node = v0.11.10 osx = 10.9.2 npm = 1.3.24

Dies erforderte:
xargs http://en.wikipedia.org/wiki/Xargs (nativ auf meinem Computer, glaube ich)
und
jq http://stedolan.github.io/jq/ (ich habe es mit installiertbrew install jq )

Hinweis: Ich speichere die aktualisierten Bibliotheken nur in package.json innerhalb des json-Schlüssels, devDependanciesindem --save-devich verwende , dass dies eine Anforderung meiner Projekte war, möglicherweise nicht Ihre.

Danach überprüfe ich mit einem einfachen, dass alles Soße ist

npm outdated --depth=0

Sie können auch die aktuell installierten Bibliotheksversionen auf oberster Ebene mit überprüfen

npm list --depth=0
andxyz
quelle
Ich liebe jq und benutze es fast jeden Tag, aber zu diesem Zweck benutze ich awkstattdessen einfach :npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Qorbani
1
Ich habe verwendetcat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Richard Ayotte
15

Wenn Sie einen sanften Ansatz über eine schöne (für das Terminal) interaktive Berichtsoberfläche verwenden möchten, würde ich die Verwendung von npm-check empfehlen .

Es ist weniger ein Hammer und gibt Ihnen mehr konsequentes Wissen über und Kontrolle über Ihre Abhängigkeitsaktualisierungen.

Um Ihnen einen Vorgeschmack auf das zu geben, was Sie erwartet, hier ein Screenshot (von der Git-Seite für npm-check gestrichen):

Geben Sie hier die Bildbeschreibung ein

TWright
quelle
14

Diese Funktion wurde in eingeführt npm v5. Update auf npm mit npm install -g npm@latestund

aktualisieren package.json

  1. löschen /node_modulesundpackage-lock.json (if you have any)

  2. laufen npm update. Dadurch wird die Abhängigkeit package.json basierend auf semver auf den neuesten Stand gebracht .

auf die neueste Version aktualisieren. du kannst mit gehennpm-check-updates

Sibiraj
quelle
13

Wenn Sie Garn verwenden, aktualisiert der folgende Befehl alle Pakete auf ihre neueste Version:

yarn upgrade --latest

Aus ihren Dokumenten :

Der upgrade --latestBefehl aktualisiert Pakete genauso wie der Befehl upgrade, ignoriert jedoch den in package.json angegebenen Versionsbereich. Stattdessen wird die durch das neueste Tag angegebene Version verwendet (möglicherweise werden die Pakete über Hauptversionen hinweg aktualisiert).

fotijr
quelle
1
Aktualisiert die Abhängigkeiten in package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh
13

Ab npm Version 5.2.0 gibt es eine Möglichkeit, dies in einer einzigen Zeile auszuführen, ohne zusätzliche Pakete in Ihrer globalen npm-Registrierung oder lokal in Ihrer Anwendung zu installieren. Dies kann durch Nutzung des neuen npxDienstprogramms erreicht werden, das mit npm gebündelt ist. ( Klicken Sie hier, um mehr zu erfahren. )

Führen Sie den folgenden Befehl im Stammverzeichnis Ihres Projekts aus:

npx npm-check-updates -u && npm i
Ilyakam
quelle
Ich habe es gerade versucht und es funktioniert ... außer ich musste laufen npm install, um die neuen Abhängigkeiten tatsächlich herunterzuladen. Ich denke, dies aktualisiert nur die package.json, es sei denn, ich vermisse etwas
owsega
@owsega, du hast absolut recht, danke! Ich habe meine Antwort so geändert, dass sie auch ausgeführt wird, npm installnachdem die Abhängigkeiten aktualisiert wurden.
Ilyakam
13

Ich benutze npm-check, um dies zu erreichen.

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

Geben Sie hier die Bildbeschreibung ein

Eine weitere nützliche Befehlsliste, in der die genauen Versionsnummern gespeichert sind 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
quelle
Es ist ncu -uund nicht ncu -uain der vorletzten Zeile. Ich kann nicht bearbeiten, da eine Zeichenänderung nicht zulässig ist. Übrigens sehr hilfreich.
Sohail Ahmed
10

Updtr!

Basierend auf npm veraltet installiert updtr die neueste Version und führt für jede Abhängigkeit einen npm-Test aus. Wenn der Test erfolgreich ist, speichert updtr die neue Versionsnummer in Ihrer package.json. Wenn der Test jedoch fehlschlägt, setzt updtr seine Änderungen zurück.

https://github.com/peerigon/updtr

David Braun
quelle
9

Befehle, die ich zum Aktualisieren verwenden musste package.jsonfür NPM 3.10.10:

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

Hintergrund:

Ich habe den neuesten Befehl von @ josh3736 verwendet, aber mein Befehl package.jsonwurde nicht aktualisiert. Ich habe dann beim Ausführen den Beschreibungstext bemerkt npm-check-updates -u:

Die folgende Abhängigkeit wird durch den deklarierten Versionsbereich erfüllt, die installierte Version liegt jedoch zurück. Sie können die neueste Version installieren, ohne Ihre Paketdatei mithilfe des npm-Updates zu ändern. Wenn Sie die Abhängigkeit in Ihrer Paketdatei trotzdem aktualisieren möchten, führen Sie ncu -a aus.

Wenn Sie die Dokumentation für npm-check-Updates lesen, können Sie den Unterschied erkennen:

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

-u, --upgrade: Paketdatei überschreiben

-a, --upgradeAll: Enthält auch die Abhängigkeiten, deren neueste Version die deklarierte Semver-Abhängigkeit erfüllt

ncu ist ein Alias ​​für, npm-check-updateswie in der Nachricht beim Eingeben zu sehen npm-check-updates -u:

[INFO]: You can also use ncu as an alias
Ogglas
quelle
In npm-check-updates v3 -aist dies das Standardverhalten, und das Überschreiben von package.json bleibt ausschließlich der -uOption überlassen .
Raine Revere
8

Wenn Sie verwenden yarn,yarn upgrade-interactive ist dies ein wirklich elegantes Tool, mit dem Sie Ihre veralteten Abhängigkeiten anzeigen und dann auswählen können, welche Sie aktualisieren möchten.

Weitere Gründe, Garn zu verwenden npm. Heh.

Yangshun Tay
quelle
Das Garn bewegt sich schnell, erreicht bereits eine 1.0 und ist ein verdammtes Vergnügen. Dies sollte die neu ausgewählte Antwort sein.
Josh Habdas
1
Aktualisiert die Abhängigkeiten in package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh
5

Die oben genannten Befehle sind unsicher, da Sie Ihr Modul beim Versionswechsel möglicherweise beschädigen können. Stattdessen empfehle ich Folgendes

  • Legen Sie mit dem npm shrinkwrapBefehl die aktuelle Version der Knotenmodule in package.json fest .
  • Aktualisieren Sie jede Abhängigkeit auf die neueste Version, wenn Ihre Tests nicht mit dem Befehlszeilentool https://github.com/bahmutov/next-update unterbrochen werden
npm install -g nächstes Update
// aus deinem Paket
nächstes Update
gleb bahmutov
quelle
1
Abwärtsinkompatible Änderungen müssen für aktive Projekte geschützt werden. Das OP befasst sich mehr mit dem Starten eines neuen Projekts, bei dem Sie die Dinge jetzt und nicht später brechen möchten und über die neuesten Versionen verfügen, mit denen Sie arbeiten können.
Raine Revere
3

Versuchen Sie den folgenden Befehl, wenn Sie npm 5 und Knoten 8 verwenden

npm update --save

krunal shah
quelle
2
Der updateBefehl scheint Abhängigkeiten nicht über die ursprüngliche Definition hinaus zu stoßen. Wenn genau package.jsonerklärt "1.2.3", werden Sie nicht bekommen 1.2.4. Das kann gut oder schlecht sein :)
Álvaro González
3

Der folgende Code (der akzeptiert wurde) schrieb mir so etwas wie "es dauert zu lange bla-bla" und tat nichts. Wahrscheinlich war die Verwendung der globalen Flagge das Problem, idk.

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

Ich entschied mich für meinen Texteditor und verfolgte stattdessen einen halbmanuellen Ansatz.

Ich habe eine Liste wie diese (nur viel länger) aus den Entwicklungsabhängigkeiten von my package.jsonin den Notepad ++ - Texteditor kopiert :

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

Ich habe den Suchmodus auf regulären Ausdruck gesetzt, das ^\s*"([^"]+)".*$Muster verwendet, um den Paketnamen zu erhalten, und ihn durch ersetzt npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Klicken Sie auf "Alle ersetzen". Der otput war dieser:

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

Ich kopierte es zurück zu Bash und drückte die Eingabetaste. Alles wurde aktualisiert und funktioniert gut. Das ist alles.

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

Ich denke nicht, dass es eine große Sache ist, da Sie es nur ab und zu tun müssen, aber Sie können leicht ein Skript schreiben, das das analysiert package.jsonund Ihre Pakete aktualisiert. Ich denke, es ist besser so, weil Sie Ihre Liste bearbeiten können, wenn Sie etwas Besonderes benötigen, zum Beispiel die aktuelle Version einer Bibliothek behalten.

inf3rno
quelle
1
Bei npm-check-Updates ist das hängende Terminal unter Windows ein bekanntes Problem. Versuchen Sie es hinzuzufügen, --packageFile package.jsondamit Sie nicht auf stdin warten müssen.
Raine Revere
@RaineRevere Danke!
inf3rno
3

Ich habe dieses Problem gelöst, indem ich die Anweisungen unter https://github.com/tjunnone/npm-check-updates gelesen habe

$ 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
quelle
3

Ich habe eine andere Lösung für die aktuelle Version von NPM gefunden. Ich möchte alle "*" - Abhängigkeiten durch die explizit letzte Versionsnummer ersetzen. Keine der besprochenen Methoden hat bei mir funktioniert.

Was ich getan habe:

  1. Ersetzen Sie alle "*" durch "^ 0.0.0"
  2. Lauf npm-check-updates -u

Alles in package.json wird jetzt auf die letzte Version aktualisiert.

miqrc
quelle
3

Wenn Sie keine globalen npm-check-Updates installieren möchten, können Sie einfach Folgendes ausführen:

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é
quelle
2

Alternative ist

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

Jedes Mal, wenn Sie das npm-Update verwenden, wird es automatisch auf die neueste Version aktualisiert. Weitere Versionssyntaxen finden Sie hier: https://www.npmjs.org/doc/misc/semver.html

Oase
quelle
Ein Grund für die Versionierung besteht darin, abwärtskompatible Änderungen von neueren Hauptversionen zu verhindern. Ich würde gegen diese oder '*' Versionsnummern empfehlen. Das OP bezieht sich auf die Erleichterung des Prozesses, während die Kontrolle darüber behalten wird, wann er auftritt.
Raine Revere
2

Lösung ohne zusätzliche Pakete

Ändern Sie die Version jeder Abhängigkeit in *:

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

Dann renne npm update --save.

Einige Ihrer Pakete wurden aktualisiert, andere nicht?

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

Dies ist der schwierige Teil. Dies bedeutet, dass Ihre lokale Version von "reagieren" niedriger war als die neueste. In diesem Fall hat npm das "React" -Paket heruntergeladen und aktualisiert. Ihre lokale Version von "React-Google-Maps" ist jedoch dieselbe wie die neueste.

Wenn Sie dennoch unverändert "aktualisieren" möchten *, müssen Sie diese Module aus dem node_modulesOrdner löschen .

zB löschen node_modules/react-google-maps.

Endlich wieder laufen npm update --save.

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

Vergessen Sie nicht, die Ausführung auszuführen, npm update --save-devwenn Sie Entwicklungsabhängigkeiten aktualisieren möchten.

Alexey Volodko
quelle
1

Greenkeeper, wenn Sie Github verwenden. https://greenkeeper.io/

Es ist eine Github-Integration und unglaublich einfach einzurichten. Bei der Installation werden automatisch Pull-Anforderungen in den von Ihnen angegebenen Repositorys erstellt (oder auf Wunsch alle), und Ihr Code wird immer auf dem neuesten Stand gehalten, ohne dass Sie gezwungen sind, manuell etwas zu tun. PRs sollten dann einen Build auf einem CI-Service auslösen. Abhängig von einer erfolgreichen oder fehlgeschlagenen Überprüfung können Sie immer wieder herausfinden, was das Problem auslöst oder wenn CI erfolgreich ist, die PR einfach zusammenführen.

Greenkeeper PR 1 Greenkeeper PR 2

Unten sehen Sie, dass der erste Build zuerst fehlgeschlagen ist und nach einem Commit ("Upgrade auf Node v6.9") die Tests bestanden wurden, sodass ich den PR endlich zusammenführen konnte. Kommt auch mit viel Emoji.

Eine andere Alternative wäre https://dependencyci.com/ , aber ich habe es nicht intensiv getestet. Nach einem ersten Blick sieht Greenkeeper im Allgemeinen besser aus IMO und hat eine bessere Integration.

Luca Steeb
quelle
1
  • npm veraltet
  • npm Update

Sollten Sie die neuesten gewünschten Versionen erhalten, die für Ihre App kompatibel sind. Aber nicht die neuesten Versionen.

webkitfanz
quelle