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 version
package.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!
npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
Antworten:
Es sieht so aus, als ob npm-check-updates der einzige Weg ist, dies jetzt zu erreichen.
Am npm <3.11:
Ändern Sie einfach die Version jeder Abhängigkeit in
*
und führen Sie sie ausnpm update --save
. ( Hinweis: In neueren (3.11) Versionen von npm defekt ).Vor:
Nach:
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.quelle
*
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--save
hier verwenden, wird das*
durch die aktuelle Version jedes Pakets ersetzt.npm install --save
der Platzhalter in meinem verbleibtpackage.json
.update
funktioniert 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?npm install -g npm-check-updates
, um zu installieren, umnpm-check-updates
zu überprüfen, ob Ihre Abhängigkeiten aktualisiert wurden, undnpm-check-updates -u
um Ihre package.json-Versionen zu aktualisieren. Dann ist es einfachnpm install
und es werden neue Versionen heruntergeladen.npm update --save
statt eingebennpm update --save-dev
.npm-check-updates
ist ein Dienstprogramm, das eine package.json automatisch mit der neuesten Version aller Abhängigkeiten anpasstSiehe https://www.npmjs.org/package/npm-check-updates
[BEARBEITEN] Eine etwas weniger aufdringliche Methode (vermeidet eine globale Installation), wenn Sie eine moderne Version von haben,
npm
ist:quelle
ncu -a
aktualisiert, nicht auch package.json.Aktualisiert für den neuesten NPM
npm 2+ (Knoten 0,12+):
Altes npm (circa 2014):
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-updates
odernpm outdated
, um die neuesten Versionen vorzuschlagen.Führen Sie dann eine Neuinstallation durch (ohne die rm habe ich einige Abhängigkeitswarnungen erhalten)
Zuletzt speichern Sie genaue Versionen
npm-shrinkwrap.json
mitnpm shrinkwrap
Jetzt
npm install
werden jetzt genaue Versionen in verwendetnpm-shrinkwrap.json
Wenn Sie
npm-shrinkwrap.json
in 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).
npm veraltet
npm-check-updates
npm Shrinkwrap
ps Yarn sendet Ihre Paketliste an Facebook .
quelle
npm-shrinkwrap.json
Quellcode 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.npm update
Nur Updates auf die Semver-Version, nicht die neueste.yarn upgrade package@version
?Um eine Abhängigkeit auf die neueste Version zu aktualisieren, ohne die manuell öffnen
package.json
und ändern zu müssen, können Sie sie ausführendh
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:
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.json
Dinge manuell bearbeiten zu müssen ;)quelle
npm install react-native-image-picker@* --save
ncu express mocha chai
. Sie können Pakete auch mit ausschließenncu -x mocha
. Ich bin damit einverstanden, dass das oben Genannte die einfachste Lösung für die Aktualisierung eines einzelnen Pakets ist.npm install {package-name}@latest {save flags}
Wenn Sie Visual Studio Code als IDE verwenden, ist dies eine lustige kleine Erweiterung, um die Aktualisierung mit
package.json
einem Klick durchzuführen.Versionslinse
quelle
Dies funktioniert ab npm 1.3.15.
quelle
npm shrinkwrap
, um Deps einzufrieren."react": "16.9.0"
und dann habe ich ihn zuletzt hinzugefügt und ausgeführt.npm i
Wie 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 keinenpm i
*
als Version für die neuesten Versionen, einschließlich instabillatest
als Versionsdefinition für die aktuelle stabile VersionLatestStablePackages
Hier ist ein Beispiel:
quelle
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:
quelle
rm -rf node_modules
bevornpm install
ich einige Abhängigkeitswarnungen für mich losgeworden bin.Verwenden Sie den folgenden Befehl, um festzustellen, für welche Pakete neuere Versionen verfügbar sind:
Um nur eine Abhängigkeit zu aktualisieren, verwenden Sie einfach den folgenden Befehl:
Zum Beispiel:
Meine
package.json
Datei hat Abhängigkeit:dann sollte ich schreiben:
quelle
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-upgrade
im Stammverzeichnis Ihres Projekts (neben derpackage.json
Datei) ausgeführt wurde: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:
Dann aus dem Stammverzeichnis eines Projekts mit einer package.json-Datei:
quelle
npm-upgrade
hat bei mir nicht funktioniert, abernpm upgrade
es hat meine package.json-Datei aktualisiert, die genau das war, wonach ich gesucht habe.npm-upgrade
ist, dass Sie genau sehen, was aktualisiert wird, und auswählen, welche aktualisiert werden sollen.npm upgrade
mag für die meisten Leute gut funktionieren, aber manchmal müssen Sie beim Upgrade etwas mehr Kontrolle haben.npx npm-upgrade
- ziemlich cool! :)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
Wie benutzt man
Wählen Sie in der JSON-Datei die Paketversionen aus, die Sie ersetzen möchten.
Geben Sie den obigen regulären Ausdruck ein und überprüfen Sie, ob er mit dem richtigen Text übereinstimmt.
Ersetzen Sie alle Übereinstimmungen durch ein Sternchen.
Lauf
npm update --save
quelle
('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
:
undctrl+d
mehrmals 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"*"
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:
Die Idee hier: Um die
npm outdated
Ausgabe als jsonjq
weiterzuleiten, wird (jq ist ein json-Befehlszeilen-Parser / Abfragetool)
(beachten Sie die Verwendung des
--depth
Arguments fürnpm outdated
)jq die Ausgabe nur auf den Paketnamen der obersten Ebene reduzieren.
Schließlich setzt xargs jeden LIBRARYNAME einzeln in ein
npm install LIBRARYNAME --save-dev
Befehl einDas 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 installiert
brew install jq
)Hinweis: Ich speichere die aktualisierten Bibliotheken nur in package.json innerhalb des json-Schlüssels,
devDependancies
indem--save-dev
ich verwende , dass dies eine Anforderung meiner Projekte war, möglicherweise nicht Ihre.Danach überprüfe ich mit einem einfachen, dass alles Soße ist
Sie können auch die aktuell installierten Bibliotheksversionen auf oberster Ebene mit überprüfen
quelle
awk
stattdessen einfach :npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
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):
quelle
Diese Funktion wurde in eingeführt
npm v5
. Update auf npm mitnpm install -g npm@latest
undaktualisieren
package.json
löschen
/node_modules
undpackage-lock.json (if you have any)
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 gehen
npm-check-updates
quelle
Wenn Sie Garn verwenden, aktualisiert der folgende Befehl alle Pakete auf ihre neueste Version:
yarn upgrade --latest
Aus ihren Dokumenten :
quelle
package.json
- github.com/yarnpkg/yarn/issues/4390Ab 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
npx
Dienstprogramms 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:
quelle
npm install
, um die neuen Abhängigkeiten tatsächlich herunterzuladen. Ich denke, dies aktualisiert nur die package.json, es sei denn, ich vermisse etwasnpm install
nachdem die Abhängigkeiten aktualisiert wurden.Ich benutze
npm-check
, um dies zu erreichen.Eine weitere nützliche Befehlsliste, in der die genauen Versionsnummern gespeichert sind
package.json
quelle
ncu -u
und nichtncu -ua
in der vorletzten Zeile. Ich kann nicht bearbeiten, da eine Zeichenänderung nicht zulässig ist. Übrigens sehr hilfreich.Updtr!
https://github.com/peerigon/updtr
quelle
Befehle, die ich zum Aktualisieren verwenden musste
package.json
fürNPM 3.10.10
:Hintergrund:
Ich habe den neuesten Befehl von @ josh3736 verwendet, aber mein Befehl
package.json
wurde nicht aktualisiert. Ich habe dann beim Ausführen den Beschreibungstext bemerktnpm-check-updates -u
:Wenn Sie die Dokumentation für npm-check-Updates lesen, können Sie den Unterschied erkennen:
https://www.npmjs.com/package/npm-check-updates
ncu ist ein Alias für,
npm-check-updates
wie in der Nachricht beim Eingeben zu sehennpm-check-updates -u
:quelle
-a
ist dies das Standardverhalten, und das Überschreiben von package.json bleibt ausschließlich der-u
Option überlassen .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.quelle
package.json
- github.com/yarnpkg/yarn/issues/4390Die oben genannten Befehle sind unsicher, da Sie Ihr Modul beim Versionswechsel möglicherweise beschädigen können. Stattdessen empfehle ich Folgendes
npm shrinkwrap
Befehl die aktuelle Version der Knotenmodule in package.json fest .quelle
Versuchen Sie den folgenden Befehl, wenn Sie npm 5 und Knoten 8 verwenden
npm update --save
quelle
update
Befehl scheint Abhängigkeiten nicht über die ursprüngliche Definition hinaus zu stoßen. Wenn genaupackage.json
erklärt"1.2.3"
, werden Sie nicht bekommen1.2.4
. Das kann gut oder schlecht sein :)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.
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.json
in den Notepad ++ - Texteditor kopiert :Ich habe den Suchmodus auf regulären Ausdruck gesetzt, das
^\s*"([^"]+)".*$
Muster verwendet, um den Paketnamen zu erhalten, und ihn durch ersetztnpm uninstall \1 --save-dev \nnpm install \1 --save-dev
. Klicken Sie auf "Alle ersetzen". Der otput war dieser:Ich kopierte es zurück zu Bash und drückte die Eingabetaste. Alles wurde aktualisiert und funktioniert gut. Das ist alles.
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.json
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 behalten.quelle
--packageFile package.json
damit Sie nicht auf stdin warten müssen.Ich habe dieses Problem gelöst, indem ich die Anweisungen unter https://github.com/tjunnone/npm-check-updates gelesen habe
quelle
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:
npm-check-updates -u
Alles in package.json wird jetzt auf die letzte Version aktualisiert.
quelle
Wenn Sie keine globalen npm-check-Updates installieren möchten, können Sie einfach Folgendes ausführen:
quelle
Alternative ist
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
quelle
Lösung ohne zusätzliche Pakete
Ändern Sie die Version jeder Abhängigkeit in
*
:Dann renne
npm update --save
.Einige Ihrer Pakete wurden aktualisiert, andere nicht?
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 demnode_modules
Ordner löschen .zB löschen
node_modules/react-google-maps
.Endlich wieder laufen
npm update --save
.Vergessen Sie nicht, die Ausführung auszuführen,
npm update --save-dev
wenn Sie Entwicklungsabhängigkeiten aktualisieren möchten.quelle
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.
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.
quelle
Sollten Sie die neuesten gewünschten Versionen erhalten, die für Ihre App kompatibel sind. Aber nicht die neuesten Versionen.
quelle