Yarn: Das Garn-Upgrade aktualisiert `package.json` für Entwicklungsabhängigkeiten nicht ordnungsgemäß

Erstellt am 25. Okt. 2016  ·  83Kommentare  ·  Quelle: yarnpkg/yarn

Möchten Sie ein _Feature_ anfordern oder einen _bug_ melden?

_Fehler_

Wie ist das aktuelle Verhalten?

Wenn Sie yarn upgrade ausführen, um eine Dev-Abhängigkeit zu aktualisieren, wird die aktualisierte Version der Abhängigkeit auch mit dem --dev -Flag zum dependencies -Hash in package.json anstatt hinzugefügt devDependencies .

Dies kann auch ein Problem mit anderen Abhängigkeitstypen (wie Peer) sein, aber ich habe es nicht getestet.

Wenn das aktuelle Verhalten ein Fehler ist, geben Sie bitte die Schritte zur Reproduktion an.

$ mkdir foo && cd foo
$ yarn init
<snip>
$ yarn add lodash<strong i="19">@3</strong> --dev
<snip>

$ grep lodash package.json -C 1
  "devDependencies": {
    "lodash": "3"
  }

$ yarn outdated
yarn outdated v0.16.1
Package Current Wanted Latest
lodash  3.10.1  3.10.1 4.16.4

$ yarn upgrade lodash --dev
<snip>
success Saved 1 new dependency
└─ [email protected]

$ grep lodash package.json -C 1
  "devDependencies": {
    "lodash": "3"
  },
--
--
  "dependencies": {
    "lodash": "^4.16.4"
  }

Was ist das erwartete Verhalten?

yarn upgrade sollte die Versionszeichenfolge des Eintrags im Hash devDependencies aktualisieren.

Es wäre schön, wenn dies ohne --dev Verwendung des aktuellen Speicherorts der Abhängigkeit möglich wäre (ein Upgrade eines Dev Dep würde devDependencies ändern, ein Upgrade eines normalen Dep würde dependencies ändern) .

Bitte geben Sie Ihre node.js, Garn und Betriebssystemversion an.

$ node --version
v6.9.1
$ yarn --version
0.16.1
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12
BuildVersion:   16A323
cat-bug

Hilfreichster Kommentar

Gleiches gilt hier für Garn 1.3.2

Alle 83 Kommentare

Ich kann bestätigen, dass dies auf genau der gleichen Version von Yarn geschieht. Anstatt die vorhandene Entwicklungsabhängigkeit zu aktualisieren, wird "Abhängigkeiten" ein neuer Eintrag hinzugefügt und die vorhandene Entwicklungsabhängigkeit dort belassen.

Bestätigter Fehler auch hier.

Hier gilt das gleiche. standard immer wieder in dependencies eingefügt, obwohl es in devDependencies lebt.

Ich habe sowohl yarn upgrade standard als auch yarn upgrade standard -D ausprobiert. Gleiche Sache.

Schönes Programm! Danke, dass du es gebaut hast!

Hier ist das gleiche Problem, kurz zuvor - # 1262

Hier gilt das gleiche.

Hier gilt das gleiche. Jedes Modul über aktualisierte yarn update wird hinzugefügt dependencies .
--dev oder andere Optionen sind für yarn update nicht dokumentiert und werden anscheinend ignoriert.

Das IMO-Update sollte entweder die gleichen Optionen wie install akzeptieren - oder noch besser die Abhängigkeit in der Kategorie aktualisieren, in der es sich in package.json befindet

node --version
v6.9.0
yarn --version
0.16.1

1620 behebt dies, also werde ich dies schließen und die Diskussion dorthin verschieben.

Immer noch nicht behoben, ich verwende das neueste Garn, das über Homebrew installiert wurde.

@kube Könnten Sie bitte weitere Details hinzufügen, wenn es sich immer noch um ein Problem handelt? Versionen für OS, Node, Yarn? Ein package.json , das zur Reproduktion verwendet werden kann?

λ yarn --version
0.16.1

Ich bin auf macOS 10.12.1, habe Yarn mit Homebrew installiert.

Und hier ist das package.json an dem ich es versucht habe.

ts-loader und webpack-merge sind veraltet. Wenn Sie sie mit Garn aktualisieren, werden sie zu Abhängigkeiten hinzugefügt, sodass devDependencies veraltet bleiben.

@kube Bitte probieren Sie 0.17.0 , das gerade heute veröffentlicht wurde. Dieses Update war in dieser Version enthalten, jedoch nicht in 0.16.1 .

Sicher, aber Homebrew hat immer noch 0.16.1

λ brew upgrade yarn
Error: yarn 0.16.1 already installed

Versuchte die Installation mit NPM und hatte gerade die neueste Version, aber es scheint seltsam, Yarn mit NPM zu installieren.

Ok, bei Verwendung von 0.17.0 funktioniert alles einwandfrei, aber vielleicht sollten Sie die Brew-Version aktualisieren.
Welches ist der bevorzugte Paketmanager oder die bevorzugte Methode zur Installation von Yarn?

Brew ist die bevorzugte Installationsmethode für OSX. Es ist immer noch ein manueller Prozess, um es auf Homebrew zu aktualisieren, daher muss jemand verlangen, dass es wie hier aktualisiert wird: https://github.com/Homebrew/homebrew-core/pull/6060

Wenn ich yarn upgrade ausführe, werden keine Versionen in package.json aktualisiert. Dies ist ziemlich ärgerlich, wenn man von NPM kommt, bei dem die Nummern automatisch aktualisiert werden.

Ich verwende Garn 0.17.2 von Homebrew.

@milesj , dies sollte wahrscheinlich ein separates Problem sein und bitte geben Sie Schritte zum Reproduzieren zusammen mit einem package.json , das wir zum Reproduzieren verwenden könnten.

Ich werde eine neue Ausgabe erstellen.

Bei Debian Stable, Garn 0.17.4, scheint dieses Problem zumindest behoben zu sein. Es wurde lodash@3 ordnungsgemäß auf lodash@4 aktualisiert, sodass es möglicherweise nur darum geht, auf die neueste Version zu wechseln.

Ich versuche, grunt-sass von 1.1.0 auf 2.0.0 aktualisieren (in meinen __dev-Abhängigkeiten__).
Ich führe yarn upgrade [email protected] , füge aber grunt-sass in meine __dependencies__ ein und aktualisiere nicht das in __dev-dependencies__

Ich habe auch yarn upgrade [email protected] --dev ausprobiert, aber das Problem bleibt weiterhin bestehen

Mit Garn v0.18.1 kann ich immer noch kein Upgrade einer Unterabhängigkeit erzwingen. yarn upgrade fügt der package.json nur einen neuen Eintrag hinzu und aktualisiert die Unterabhängigkeit nicht.

Das Problem in 0.19.1 ist weiterhin vorhanden. Das Garn-Upgrade hat package.json nicht aktualisiert.

@kittens dies ist nicht durch # 1620 behoben

Ich kann dieses Problem auch in 0.19.1 bestätigen.

Jeder, der yarn add <package-name> , aktualisiert Ihr gewünschtes Paket vorerst.

yarn upgrade funktioniert auch bei mir nicht, v0.19.1

Das Garn-Upgrade aktualisiert derzeit nur yarn.lock, nicht package.json.

Kann das Problem in Version 0.20.3 bestätigen

Ich habe das gleiche Problem, wenn Garn-Upgrade verwendet wird, werden alle Pakete aktualisiert, aber nicht in der Datei package.json. v0.20.3 .. wirklich nervig. Ich habe auch festgestellt, dass bei Verwendung von "Garninstallation" die neuesten Versionen aller Listenpakete in package.json installiert werden und sich nicht an die darin genannten Versionen halten. Es ist also so, als würde Garn sie auf die neueste Version aktualisiert und spiegelt dies auch nicht wider in package.json, aber es zeigt in yarn.lock die aktuellen Versionen, die installiert wurden

@kittens v0.20.3 @ Windows und aktualisiert package.json immer noch nicht - nur die Datei yarn.lock. Sie sollten dies erneut öffnen.

Ich lasse Garn fallen und wechsle wegen dieses Fehlers zurück zu npm. Egal wie ich versuche, meine Pakete zu aktualisieren, Garn holt die neuesten in den Cache und behält die alten Versionen in meiner package.json und im Ordner node_modules. Was ist der Sinn?..

Ja! Ich kann bestätigen, dass Yarn v0.21.3 endlich package.json aktualisiert, mindestens den Befehl yarn upgrade-interactive .

@alexdevero Ich habe gerade yarn upgrade bei 3 meiner Projekte ausprobiert: Es wurde kein package.json aktualisiert ....

aber ich bestätige, dass yarn upgrade-interactive funktioniert ... für das erste aktualisierte Projekt
Die nächste Verwendung von yarn upgrade-interactive für andere Projekte, die dasselbe Upgrade benötigen, schlägt fehl, dh "Erfolg Alle Ihre Abhängigkeiten sind auf dem neuesten Stand."

Ich habe mit der Aktualisierung von React-Skripten von 0.9.x auf 0.9.3 für jedes meiner 3 Projekte getestet. yarn upgrade-interactive arbeitete am ersten Projekt, ignorierte dann aber das Update für andere 2 Projekte.

Bis heute verhält sich yarn upgrade in Version 0.21.3 immer noch falsch.

Ich verwende stattdessen yarn add package<strong i="7">@version</strong> --dev und es aktualisiert das Paket wie gewünscht und aktualisiert package.json korrekt.

Fwiw, ich habe upgrade-interactive was aus irgendeinem Grund besseres Glück zu bringen scheint.

🍒 🍒 🍒

Es wäre gut zu wissen, wie sich Garn in diesem Fall erwartet. Kann einer der Garnentwickler sagen, ob Garn package.json aktualisieren soll oder nicht?

Ich habe gerade ein yarn upgrade babel-cli das sich in meinem devDependencies und es wurde als Produktionsabhängigkeit hinzugefügt (zu dependencies ) ... etwas ist immer noch völlig kaputt. Oh, und ich benutze übrigens Garn v 0.22.0!

BEARBEITEN: Es stellte sich heraus, dass ich NODE_ENV auf "Produktion" gesetzt hatte (da meine App eine Knoten-App ist) und dies Dinge wie "Garninstallation" durcheinander bringt (was sich wie yarn install --production verhält und devDependencies komplett überspringt

Möglicherweise ist yarn upgrade auch von der Knotenumgebungsvariablen betroffen.

Ich habe gerade Folgendes realisiert:
image

Ich bin kein Apologet oder so, ich denke, das sollte wieder geöffnet werden ... aber heilige Bälle. 720 Ausgaben reichen aus, um ein Kreuzfahrtschiff voller Garnentwickler zu ertränken.

Das Problem +1 ist in Yarn v0.21.3 unter Windows 10 Pro und Node 6.10.0 weiterhin vorhanden.

Dies ist nicht behoben. Ich bekomme es auf macOS Sierra 10.12.4. Ich habe einige devDependencies die private Git-Repos sind, und ein Standard dependency ( "jquery": "^3.1.1" ). Die neueste Version von jQuery ist 3.2.1, und yarn upgrade sieht das ( ├─ [email protected] ), aktualisiert aber nicht package.json .

yarn --version
0.21.3
node --version
v7.7.4

Wieder öffnen.

Windows - v0.21.3 schlägt mit yarn upgrade ... fehl, wenn ein Paket angegeben wird, nachdem sowohl package.json als auch die Sperrdatei aktualisiert wurden.

Windows - v0.22 -aktualisiert package.json immer noch nicht, aktualisiert aber die Sperrdatei.
funktionierte irgendwie, identifizierte aber nicht alle Pakete, die aktualisiert werden sollten, und löste somit verschiedene Peer-Abhängigkeiten auf.

Zum Glück habe ich es nur für ein Projekt verwendet und konnte das Chaos beheben. Ich liebe die Idee hinter Yarn, aber ich werde mich nicht darum kümmern, bis dies sortiert ist.

Windows, Yarn v0.22 - aktualisiert package.json wenn yarn upgrade wie @LaughingBubba erwähnt. Der Ordner node_modules wird aktualisiert, package.json jedoch nicht, was in Paketversionen zu einem Durcheinander führt.

@kittens es scheint nicht, dass dies behoben wurde.

Ich habe das gerade in 0.23.2 wieder gesehen.

In meinem Fall scheint es so zu sein, dass wenn mindestens eine der in einer Liste aktualisierten Abhängigkeiten KEIN devDep ist, alle Aktualisierungen in Abhängigkeiten in package.json abgelegt werden.

Update: Wird auch beim Aktualisieren eines einzelnen devDep angezeigt. Es wird in Deps kopiert, ohne aktualisiert zu werden.

Dies ist definitiv nicht behoben. Ich habe jetzt eine Stunde verloren. Sollte Garn nicht besser sein als npm?

@ fab1an , yarn add package-name<strong i="6">@latest</strong> [--dev] , um ein Paket zu aktualisieren. Es verhält sich wie erwartet von upgrade und aktualisiert package.json korrekt.

@diegovilar Danke für den Tipp, aber das ist zu umständlich für mehr als 25 Dev-Abhängigkeiten. Ich habe gerade wieder npm-check -u um sie zu aktualisieren.

Immer noch kaputt in Windows x64, Garn 0.23.2

Für alle, die hier kommentieren, schlage ich vor, in der Zwischenzeit yarn upgrade-interactive . Hat hier ziemlich gut funktioniert.

Immer noch kaputt und wenn Sie yarn upgrade-iteractive und nicht wissen, von welcher Version von tslint, codelyzer, typescript usw. diese Pakete abhängen, wie Angular oder die Angular CLI, können und werden Sie eine Reihe von Fehlern verursachen, die Sie verfolgen werden auch nachdem Sie alles zurückgerollt haben. Wurde dieses Problem erneut veröffentlicht?

@milesj NO. Ich bin hier und habe NUR upgrade-interactive mit genau den gleichen Problemen verwendet.

Ich war mir nicht sicher, ob dies Zeit hat, da es seit Monaten geschlossen ist. Daher wurde eine neue Ausgabe erstellt - # 3266

@ fab1an Das ist unglücklich. Ich hatte keine Probleme damit, package.json zu aktualisieren: /

@ fab1an @milesj Ich hatte upgrade-interactive , um package.json auch bei einem unserer Projekte nicht zu aktualisieren. Wenn Sie ein Upgrade durchführen und package.json nicht die richtige Nummer hat, aktualisieren alle interaktiven Upgrades package.json nicht ... oder so ... so oder so kann es Ihnen definitiv zustimmen, dass es manchmal nicht funktioniert.

Windows 10, Garn v0.23.4 aktualisiert die Datei package.json immer noch nicht, wenn yarn upgrade

Edit: Vielleicht ist das beabsichtigt?
Zum Beispiel: "semantic-ui-react": "^0.68.2" - Es gibt bereits eine neue Version (0.68.3) und diese Version ist installiert und yarn.lock wird auf 0.68.3 geändert, jedoch aufgrund von ^ in der Version (> = 0.68.2 <0.69.0) Es ist nicht erforderlich, package.json auf ^0.68.3 zu aktualisieren.

@iamfreee Ich verwende Yarn v0.24.5 und yarn upgrade aktualisiert package.json nicht, nur yarn.lock. Dies kann (oder sollte zumindest nicht) beabsichtigt sein, da bei der Versionierung in package.json zunächst die tatsächliche Version des Pakets festgelegt und dann die Upgrade-Einschränkungen festgelegt werden, dh ^ oder ~ . Zweitens ändert das Ausführen von yarn upgrade für ein einzelnes Paket die Datei package.json. Warum unterscheidet sich das Verhalten beim Aktualisieren aller Pakete? Warum sollte es eine Diskrepanz im Verhalten zwischen yarn upgrade und yarn upgrade-interactive , was keinen Sinn ergibt?

Dieses Problem wurde für eine Weile geschlossen, so dass es offen gesagt keine Traktion bekommt. Wir sollten einfach eine neue Ausgabe eröffnen. Auch wenn dieses Verhalten beabsichtigt ist, bin ich damit nicht einverstanden. yarn upgrade sollte nicht einmal auf das @ latest- Tag aktualisiert werden, denn was ist, wenn in Ihrer package.json eine andere Versionsbeschränkung aufgeführt ist? Siehe hier: https://docs.npmjs.com/cli/update#caret -dependencies

@leosco In meinem Fall hat npm update auch package.json nicht aktualisiert und auch yarn upgrade [package] hat den Trick nicht gemacht. Aus diesem Grund denke ich, dass das Problem mit der Versionsbeschränkung ^ oder mit dem erwarteten Verhalten.

@iamfreee Nein, du musst npm update --save was das Standardverhalten von Yarn sein soll.

Ich habe eine neue Ausgabe veröffentlicht, die dies alles ausführlich beschreibt. Siehe hier https://github.com/yarnpkg/yarn/issues/3492 und vielleicht die Diskussion dort fortsetzen.

Ich möchte auch wiederholen, dass ich mit yarn interactive-upgrade Erfolg hatte, während yarn upgrade --latest bei mir nicht funktioniert hat.
Verwenden von Garn v0.24.6 mit Knoten v7.10.0.

yarn upgrade --latest funktioniert gut: +1:

~> yarn -v
1.0.0
~> yarn upgrade --help | grep "\-\-latest" | head -n 1

  --latest       list the latest version of packages, ignoring version ranges in package.json

yarn interactive-upgrade scheint jetzt in Version 1 Probleme zu haben.

@milesj Kannst du die nächtlichen Builds ausprobieren? https://yarnpkg.com/de/docs/nightly Diese PR hat das Problem möglicherweise behoben. https://github.com/yarnpkg/yarn/commit/da2b9096057301273aa27336f70622dda09b6c33

@kaylieEB Ich bin nicht sicher, aber ich denke, yarn interactive-upgrade verhält sich jetzt anders. Ich habe es gerade in einem Projekt mit vielen kleinen Upgrades ausgeführt, und package.json wurde nicht geändert, nur yarn.lock . Vor 1.0.2 hätte package.json wahrscheinlich mit den aktualisierten Versionen synchronisiert, aber ich kann mich irren ... Der neueste nächtliche Build hat dieses Verhalten für mich nicht geändert.

yarn upgrade --latest funktioniert jetzt einwandfrei, aber ich habe es vorgezogen, interaktiv auswählen zu können, was aktualisiert werden soll, und dann die package.json anpassen zu lassen.

@lehni Es gibt auch yarn interactive-upgrade --latest .

@milesj : yarn upgrade-interactive --latest ?
Dokumente: https://yarnpkg.com/de/docs/cli/upgrade-interactive

Äh ja, Hirnfurz. Vielen Dank.

Gleiches gilt hier für Garn 1.3.2

Gleiches gilt hier für Garn 1.5.1

Wieder in 1.5.1 gebrochen

gebrochen mit -

$ node --version
v9.0.0
$ yarn --version
1.5.1

gleiches Problem Knoten v8.9.4
Garn 1.5.1

Eine Problemumgehung: Verwenden Sie yarn add anstelle von yarn upgrade .

Zusamenfassend:

  • yarn upgrade : Aktualisieren Sie Pakete auf den neuesten möglichen Bereich, der durch pacakge.json , aber überschreiben Sie sie nicht
  • yarn add : Aktualisieren Sie Pakete auf den neuesten möglichen Bereich und schreiben Sie package.json
  • yarn update , wie npm update : existiert nicht

Das Dokument von npm update sagt jedoch:

Ab [email protected] ändert das npm-Update package.json, um die neue Version als minimal erforderliche Abhängigkeit zu speichern. Verwenden Sie npm update --no-save, um das alte Verhalten zu erhalten.

Aber in der Tat...

 y > npm -v
5.7.0
 y > cat package.json
{
  "dependencies": {
    "lodash": "^4.17.5"
  }
}
 y > npm update lodash
npm WARN y No description
npm WARN y No repository field.
npm WARN y No license field.

+ [email protected]
added 1 package from 2 contributors in 1.004s
 y > cat package.json
{
  "dependencies": {
    "lodash": "^4.17.5"
  }
} 

Ich weiß nicht, welches ich verwenden soll :( Yarn hat dieses Verhalten irgendwann im Jahr 2017 hinzugefügt und es dann stillschweigend gebrochen. Npm behauptet, es zu haben, wenn es auch nicht funktioniert.

@kittens Bitte öffnen Sie dieses Problem erneut.

Wie von @octref yarn upgrade gesagt, werden die Abhängigkeiten auf die neueste Version aktualisiert, die package.json jedoch nicht überschrieben. yarn add <package> aktualisiert das Paket auf die neueste Version, wenn es bereits installiert ist und überschreibt package.json . Gibt es einen Grund für yarn upgrade , die package.json nicht zu überschreiben? Wenn ja, dann kann das vielleicht als Flag zu yarn upgrade hinzugefügt werden.

[email protected]
[email protected]
os: MacOS

Bearbeiten

Lesen Sie https://github.com/yarnpkg/yarn/issues/5602#issuecomment -377528617

Eine Problemumgehung: Verwenden Sie yarn add anstelle von yarn upgrade .

Klappt wunderbar. Diese beiden Docs-Seiten müssen aktualisiert werden, um yarn add anstelle von yarn upgrade .

Ich benutze yarn upgrade-interactive --latest jetzt schon eine ganze Weile ohne Schluckauf ...

Ich benutze Garn Upgrade-Interactive - das Neueste seit einiger Zeit ohne Schluckauf ...

Scheint ein bisschen überflüssig zu sein. Warum nicht einfach den einfachsten aller dieser Befehle verwenden, yarn add ? Super einfach.

@ guylepage3, da ich sehen kann, welche Upgrades in welchen Versionen mit unterschiedlicher Farbcodierung verfügbar sind, basierend auf Änderungen der Patch- / Minor- / Major-Version, die zu aktualisierenden auswählen und auf diese Weise mehrere Upgrades gleichzeitig durchführen. Daran ist nichts überflüssig?

@lehni, dann sollte die Dokumentation auf der Website dies widerspiegeln und auf den folgenden beiden Seiten sollte angegeben werden, dass die Methode yarn upgrade-interactive --latest verwendet werden soll.

@ guylepage3 Dieses Gespräch führt nirgendwo hin und hilft auch nicht. Wenn Sie die Aktualisierung von Dokumenten vorschlagen möchten, ist es möglicherweise besser, ein neues Problem speziell dafür zu erstellen.

Tut mir leid, wenn du so denkst @alexdevero. Und yep schon, wenn Sie oben schauen .. https://github.com/yarnpkg/yarn/issues/1458#ref -issue-332178362

Dies hat mir geholfen: https://www.npmjs.com/package/syncyarnlock

$ yarn upgrade-interactive && syncyarnlock

Dies funktioniert bei mir nicht für Garnarbeitsbereiche. Kann jemand einen Blick darauf werfen?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen