Ich habe package.json aus einem anderen Projekt kopiert und möchte nun alle Abhängigkeiten auf die neuesten Versionen ausrichten, da dies ein neues Projekt ist und ich nichts dagegen habe, etwas zu reparieren, falls es kaputt geht.
Was ist der einfachste Weg, dies zu tun?
Der beste Weg, den ich jetzt kenne, ist, npm info express version
auszuführen und dann package.json manuell für jede Datei 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"
}
}
Ich arbeite jetzt an npm-check-updates , was eine großartige Lösung für dieses Problem ist.
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 dann npm update --save
aus. (Hinweis: _ in aktuellen (3.11) Versionen von npm defekt ).
Vor:
"dependencies": {
"express": "*",
"mongodb": "*",
"underscore": "*",
"rjs": "*",
"jade": "*",
"async": "*"
}
Nach dem:
"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"
}
Natürlich ist dies der stumpfe Hammer der Aktualisierung von Abhängigkeiten. Es ist in Ordnung, wenn - wie Sie sagten - das Projekt leer ist und nichts kaputt gehen kann.
Wenn Sie dagegen in einem ausgereifteren Projekt arbeiten, möchten Sie wahrscheinlich vor dem Upgrade sicherstellen, dass Ihre Abhängigkeiten sich nicht ändern.
Um zu sehen, welche Module veraltet sind, führen Sie einfach npm outdated
aus. Es werden alle installierten Abhängigkeiten aufgelistet, für die neuere Versionen verfügbar sind.
npm-check-updates
ist ein Dienstprogramm, mit dem ein package.json automatisch mit der neuesten Version aller Abhängigkeiten angepasst wird
siehe https://www.npmjs.org/package/npm-check-updates
$ npm install -g npm-check-updates
$ ncu -u
$ npm install
Die Dinge haben sich ein wenig geändert, seit diese Antworten ursprünglich geschrieben wurden.
npm outdated
+ npm update
+ npm shrinkwrap
npm-check-updates
package + npm shrinkwrap
Stellen Sie sicher, dass Ihre Deps verkleinert werden. Andernfalls könnte es zu einem toten Projekt kommen. Ich habe neulich ein Projekt herausgezogen und es lief nicht, weil meine Deps alle nicht mehr aktuell waren/aktualisiert/ein Durcheinander waren. Wenn ich geschrumpft wäre, hätte npm genau das installiert, was ich brauchte.
Für die Neugierigen, die es soweit schaffen, empfehle ich Folgendes:
npm-check-updates
oder 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
$ rm -rf node_modules
$ npm install
npm-shrinkwrap.json
in npm shrinkwrap
.$ rm npm-shrinkwrap.json
$ npm shrinkwrap
npm install
jetzt genaue Versionen in npm-shrinkwrap.json
verwenden.Wenn Sie npm-shrinkwrap.json
in git einchecken, werden für alle Installationen dieselben Versionen verwendet.
Dies ist ein Weg, um aus der Entwicklung (alle Updates zu jeder Zeit) in die Produktion überzugehen (niemand berührt nichts).
Um die one - Abhängigkeit auf die letzte Version zu aktualisieren, ohne den package.json
manuell öffnen und ändern zu müssen, können Sie ihn ausführen
npm install {package-name}@* {save flags?}
d.h.
npm install [email protected]* --save
Zu Referenzzwecken npm-install
Wie der Benutzer Vespakoen in einer abgelehnten Bearbeitung festgestellt hat, können Sie auch mehrere Pakete gleichzeitig auf diese Weise aktualisieren:
npm install --save [email protected]* [email protected]* [email protected]*
Er erstellt auch einen Einzeiler für die Shell basierend auf npm outdated
. Siehe die Bearbeitung für Code und Erklärung.
PS: Ich hasse es auch, package.json
für solche Dinge manuell bearbeiten zu müssen;)
Wenn Sie Visual Studio Code als IDE verwenden, ist dies eine unterhaltsame Erweiterung, um package.json
mit einem Klick zu aktualisieren.
Dies funktioniert ab npm 1.3.15.
"dependencies": {
"foo": "latest"
}
*
als Version für die neuesten Versionen, einschließlich Unstablelatest
als Versionsdefinition für die neueste stabile VersionLatestStablePackages
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"
},
Der einzige Nachteil, den ich mit der besten Antwort oben gefunden habe, ist, dass die Module auf die neueste Version aktualisiert werden. Dies bedeutet, dass ein Update auf einen instabilen Alpha-Build durchgeführt werden konnte.
Ich würde dieses Dienstprogramm npm-check-updates verwenden. Meine Gruppe nutzte dieses Tool und es funktionierte effektiv, indem es die stabilen Updates installierte.
Wie Etienne oben angegeben hat: Installieren und starten Sie Folgendes:
$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install
Um festzustellen, für welche Pakete neuere Versionen verfügbar sind, verwenden Sie den folgenden Befehl:
npm outdated
um nur one Abhängigkeit zu aktualisieren, benutzen Sie einfach den folgenden Befehl:
npm install [email protected] --save
Zum Beispiel:
Meine package.json
-Datei hat eine Abhängigkeit:
"@progress/kendo-angular-dateinputs": "^1.3.1",
dann sollte ich schreiben:
npm install @progress/[email protected] --save
Ich mag es wirklich, wie npm-upgrade funktioniert. Es ist ein einfaches Befehlszeilenprogramm, das alle Ihre Abhängigkeiten durchläuft und Ihnen ermöglicht, die aktuelle Version im Vergleich zur neuesten Version anzuzeigen und gegebenenfalls zu aktualisieren.
Hier ist ein Screenshot, was nach dem Ausführen von npm-upgrade
im Stammverzeichnis Ihres Projekts (neben der package.json
-Datei) geschieht:
Für jede Abhängigkeit können Sie ein Upgrade durchführen, ignorieren, das Änderungsprotokoll anzeigen oder den Prozess beenden. Es hat bisher für mich super funktioniert.
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 Stamm eines Projekts, das eine package.json-Datei enthält:
npm-upgrade
Hier ist ein grundlegender Regex, der semantische Versionsnummern angleicht, sodass Sie sie schnell durch ein Sternchen ersetzen können.
([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
Wählen Sie die Paketversionen aus, die Sie in der JSON-Datei ersetzen möchten.
Geben Sie den Regex oben ein und überprüfen Sie, ob er mit dem richtigen Text übereinstimmt.
Ersetzen Sie alle Übereinstimmungen durch ein Sternchen.
npm update --save
ausführen
Diese Funktion wurde in npm v5
eingeführt. Aktualisieren Sie mit npm install -g [email protected]
und auf npm
package.json
aktualisieren
/node_modules
und package-lock.json (if you have any)
löschen
npm update
ausführen. Dadurch werden die Abhängigkeiten package.json auf den neuesten Stand basierend auf semver aktualisiert.
auf die neueste Version aktualisieren. Sie können mit npm-check-updates
gehen
Vor kurzem musste ich einige Projekte, die npm und package.json verwendeten, für ihre gruntfile.js-Magie aktualisieren. Der folgende bash-Befehl (mehrzeiliger Befehl) hat für mich 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 outdated
-Ausgabe als json an jq
weiterzuleiten
(jq ist ein Json-Befehlszeilen-Parser/Abfrage-Tool)
(Beachten Sie die Verwendung von --depth
-Argument für npm outdated
)
jq entfernt die Ausgabe nur auf den Paketnamen der obersten Ebene.
Schließlich setzt xargs jeden LIBRARYNAME einzeln in einen npm install LIBRARYNAME --save-dev
-Befehl
Das obige ist, was für mich auf einer laufenden Maschine funktionierte: Node = v0.11.10 osx = 10.9.2 npm = 1.3.24
dies erfordert:
xargs http://en.wikipedia.org/wiki/Xargs (nativ auf meinem Rechner, glaube ich)
und
jq http://stedolan.github.io/jq/ (ich habe es mit brew install jq
installiert)
Hinweis: Ich speichere die aktualisierten Bibliotheken nur in package.json im json-Schlüssel devDependancies
mithilfe von --save-dev
. Dies war eine Anforderung meiner Projekte.
Danach überprüfe ich, ob alles mit einer einfachen Soße ist
npm outdated --depth=0
Sie können auch die aktuell installierten Bibliotheksversionen der obersten Ebene mit überprüfen
npm list --depth=0
Wenn Sie einen sanften Ansatz über eine schöne (für Terminals) interaktive Berichtsschnittstelle verwenden möchten, würde ich empfehlen, npm-check zu verwenden.
Dies ist weniger ein Hammer und vermittelt Ihnen mehr Wissen über die Aktualisierung Ihrer Abhängigkeiten und die Kontrolle über diese.
Um Ihnen einen Vorgeschmack darauf zu geben, was Sie erwartet, finden Sie hier einen Screenshot (von der Git-Seite für npm-check entfernt):
Updtr!
Basierend auf npm veraltet, installiert updtr die neueste Version und führt den npm-Test für jede Abhängigkeit aus. Wenn der Test erfolgreich ist, speichert updtr die neue Versionsnummer in package.json. Wenn der Test fehlschlägt, setzt updtr seine Änderungen jedoch zurück.
Ich verwende npm-check
, um dies zu archivieren.
npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals
Eine weitere nützliche Befehlsliste, die genaue Versionsnummern in package.json
.__ enthält.
npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i
Befehle, die ich verwenden musste, um package.json
für NPM 3.10.10
zu aktualisieren:
npm install -g npm-check-updates
ncu -a
npm install
Hintergrund:
Ich habe den neuesten Befehl von @ josh3736 verwendet, aber mein package.json
wurde nicht aktualisiert. Ich habe dann den Beschreibungstext bemerkt, als npm-check-updates -u
ausgeführt wurde:
Die folgende Abhängigkeit wird durch den angegebenen Versionsbereich .__ erfüllt. aber die installierte Version liegt hinter. Sie können das neueste .__ installieren. Version, ohne die Paketdatei mit npm update zu ändern. Ob Wenn Sie die Abhängigkeit in Ihrer Paketdatei trotzdem aktualisieren möchten, führen Sie ncu .__ aus. -ein.
Wenn Sie die Dokumentation zu npm-check-updates lesen, können Sie den Unterschied sehen:
https://www.npmjs.com/package/npm-check-updates
-u, --upgrade: Paketdatei überschreiben
-a, --upgradeAll: Umfasst auch die Abhängigkeiten, deren neueste Version die deklarierte Semver-Abhängigkeit erfüllt
ncu ist ein Alias für npm-check-updates
, wie er in der Nachricht angezeigt wird, wenn npm-check-updates -u
eingegeben wird:
[INFO]: You can also use ncu as an alias
npm-check-updates
https://www.npmjs.com/package/npm-check-updates
mit npm-check-updates können Sie Ihre package.json-Abhängigkeiten auf die neuesten Versionen aktualisieren, unabhängig von den vorhandenen Versionseinschränkungen.
$ npm install -g npm-check-updates
$ ncu -u
abhängigkeiten aktualisiert! das ist alles!
Ncu ist ein neuer Alias, um nach Updates zu suchen. Auf diese Weise müssen Sie Ihre Versionsnummern in package.json nicht manuell aktualisieren. Ncu erledigt dies für Sie. Befolgen Sie die nachstehende Methode, wenn Sie sich auf einem Linux-Computer befinden
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
Ein einfacher Schritt:
$ npm install -g npm-check-updates && ncu -a && npm i
Wenn Sie yarn
verwenden, ist yarn upgrade-interactive
ein wirklich schlankes Tool, mit dem Sie Ihre veralteten Abhängigkeiten anzeigen und auswählen können, welche Sie aktualisieren möchten.
Weitere Gründe für die Verwendung von Yarn over npm
. Heh.
Die oben genannten Befehle sind nicht sicher, da Sie beim Wechseln der Version ..__ möglicherweise Ihr Modul beschädigen. Stattdessen empfehle ich Folgendes
npm shrinkwrap
in package.json.npm install -g nächstes Update // aus Ihrem Paket Nächstes Update
Versuchen Sie den folgenden Befehl, wenn Sie npm 5 und Knoten 8 verwenden
npm update --save
Wenn Sie Garn verwenden, werden mit dem folgenden Befehl alle Pakete auf ihre neueste Version aktualisiert:
yarn upgrade --latest
Aus ihren docs :
Der Befehl
upgrade --latest
aktualisiert Pakete wie der Aktualisierungsbefehl, ignoriert jedoch den in package.json angegebenen Versionsbereich. Stattdessen wird die durch das neueste Tag angegebene Version verwendet (möglicherweise werden die Pakete über die Hauptversionen aktualisiert).
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-Registry oder lokal in Ihrer Anwendung zu installieren. Dazu können Sie das neue, mit npm gebündelte npx
-Dienstprogramm nutzen. ( Klick hier um mehr zu erfahren. )
Führen Sie den folgenden Befehl im Stammverzeichnis Ihres Projekts aus:
npx npm-check-updates -u && npm i
Alternative ist
"dependencies":{
"foo" : ">=1.4.5"
}
jedes Mal, wenn Sie das npm-Update verwenden, wird es automatisch auf die neueste Version aktualisiert. Für weitere Versionssyntax können Sie hier nachsehen: https://www.npmjs.org/doc/misc/semver.html
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 dafür, meinen Texteditor zu verwenden und stattdessen einen halbmanuellen Ansatz zu verwenden.
Ich habe eine Liste dieser Art (nur viel länger) von den dev-Abhängigkeiten meines package.json
in 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äre Ausdrücke gesetzt, das Paket ^\s*"([^"]+)".*$
verwendet, um den Paketnamen zu erhalten, und es durch npm uninstall \1 --save-dev \nnpm install \1 --save-dev
ersetzt. Klicken Sie auf "Alle ersetzen". Der Ausspruch war dies:
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 habe es zurück nach Bash kopiert und die Eingabetaste gedrückt. Alles wurde verbessert und funktionierte 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 den package.json
analysiert und 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.
Lösung ohne zusätzliche Pakete
Ändern Sie die Version jeder Abhängigkeit in *
:
"dependencies": {
"react": "*",
"react-google-maps": "*"
}
Führen Sie dann npm update --save
aus.
Einige Ihrer Pakete wurden aktualisiert, andere jedoch nicht?
"dependencies": {
"react": "^15.0.1",
"react-google-maps": "*"
}
Dies ist der knifflige Teil. Es bedeutet, dass Ihre lokale Version von "React" niedriger war als die neueste. In diesem Fall wurde das heruntergeladene und aktualisierte "React" -Paket heruntergeladen. Ihre lokale Version von "reagieren-google-maps" ist jedoch dieselbe wie die neueste.
Wenn Sie *
unverändert "aktualisieren" möchten, müssen Sie diese Module aus dem node_modules
-Ordner löschen.
z.B. node_modules/react-google-maps
löschen.
Zum Schluss nochmal npm update --save
.
"dependencies": {
"react": "^15.0.1",
"react-google-maps": "^4.10.1"
}
Vergessen Sie nicht, npm update --save-dev
auszuführen, wenn Sie Entwicklungsabhängigkeiten aktualisieren möchten.
Sollte Ihnen die neuesten gewünschten Versionen für Ihre App bieten. Nicht jedoch die neuesten Versionen.
So habe ich alle Abhängigkeiten in package.json
auf den neuesten Stand gebracht:
npm install -g npm-check-updates
ncu -u --packageFile package.json
Wenn Sie keine globalen npm-check-updates installieren möchten, können Sie dies einfach 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()))"
Ich habe das Problem gelöst, indem ich die Anweisungen von https://github.com/tjunnone/npm-check-updates gesehen 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
Greenkeeper, wenn Sie Github verwenden. https://greenkeeper.io/
Es ist eine Github-Integration und unglaublich einfach einzurichten. Wenn es installiert ist, erstellt es automatisch Pull-Anforderungen in den von Ihnen angegebenen Repositorys (oder bei Bedarf alle gewünschten) und hält Ihren Code stets auf dem neuesten Stand, ohne dass Sie dazu gezwungen werden, 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 herausfinden, was das Problem auslöst. Wenn die CI bestanden hat, führen Sie einfach die PR zusammen.
Unten sehen Sie, dass der erste Build zuerst fehlgeschlagen ist und nach einem Festschreiben ("Upgrade auf Knoten v6.9") die Tests bestanden wurden, sodass ich die PR schließlich zusammenführen konnte. Kommt auch mit viel Emoji.
Eine andere Alternative wäre https://dependencyci.com/ , allerdings habe ich es nicht intensiv getestet. Nach einem ersten Blick sieht Greenkeeper im Allgemeinen besser aus und hat eine bessere Integration.
Ich habe eine andere Lösung für die aktuelle Version von NPM gefunden. Was ich tun möchte, ist, alle "*" Abhängigkeiten durch die explizite letzte Versionsnummer zu ersetzen. Keine der besprochenen Methoden hat bei mir funktioniert.
Was ich getan habe:
npm-check-updates -u
ausführenAlles in package.json wird jetzt auf die letzte Version aktualisiert.
Die derzeit einfachste Möglichkeit, dies zu tun, besteht darin, pnpm anstelle von npm zu verwenden und einfach Folgendes einzugeben:
pnpm update --latest
Ein automatisches Update ist mit NPM-Skript möglich:
{
"_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 [email protected] -g",
"npm-check-i-g": "npm i [email protected] -g",
"eslint-i-g": "npm i [email protected] -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"
}
}
Für weitere Details und eine schrittweise Anleitung: https://stackoverflow.com/a/34295664/462347