Yarn: La mise à niveau de Yarn ne met pas correctement à jour `package.json` pour les dépendances dev

Créé le 25 oct. 2016  ·  83Commentaires  ·  Source: yarnpkg/yarn

Voulez-vous demander une _fonctionnalité_ ou signaler un _bug_?

_punaise_

Quel est le comportement actuel?

Lancer yarn upgrade pour mettre à niveau une dépendance dev, même avec l'indicateur --dev , ajoutera la version mise à jour de la dépendance au hachage dependencies dans package.json plutôt que devDependencies .

Cela peut également être un problème avec d'autres types de dépendances (comme les pairs), mais je n'ai pas testé.

Si le comportement actuel est un bogue, veuillez fournir les étapes à reproduire.

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

Quel est le comportement attendu?

yarn upgrade doit mettre à jour la chaîne de version de l'entrée dans le hachage devDependencies .

Ce serait bien si cela pouvait être fait sans --dev utilisant l'emplacement actuel de la dépendance (la mise à niveau d'un dep dev modifierait devDependencies , la mise à jour d'un dep normal modifierait dependencies ) .

Veuillez mentionner votre node.js, votre fil et la version de votre système d'exploitation.

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

Commentaire le plus utile

idem ici avec le fil 1.3.2

Tous les 83 commentaires

Je peux confirmer que je vois cela se produire exactement sur la même version de Yarn. Au lieu de mettre à jour la dépendance de développement existante, il ajoute une nouvelle entrée aux «dépendances» et y laisse la dépendance de développement existante.

Bug confirmé ici aussi.

Pareil ici. standard continue d'être inséré dans dependencies même s'il vit dans devDependencies .

J'ai essayé à la fois yarn upgrade standard et yarn upgrade standard -D . Même chose.

Beau programme cependant! Merci de l'avoir construit!

Voici le même problème, un peu avant - # 1262

Pareil ici.

Pareil ici. Chaque module mis à jour via yarn update est ajouté à dependencies .
--dev ou d'autres options ne sont pas documentées pour yarn update et apparemment ignorées.

La mise à jour de l'OMI devrait soit accepter les mêmes options que install - ou encore mieux mettre à jour la dépendance dans la catégorie dans laquelle elle se trouve dans package.json

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

1620 corrige ce problème, je vais donc fermer ceci et déplacer la discussion là-bas.

Toujours pas corrigé, j'utilise le dernier Yarn installé via Homebrew.

@kube Pourriez-vous s'il vous plaît ajouter plus de détails si le problème persiste? Versions pour OS, Node, Yarn? Un package.json qui peut être utilisé pour se reproduire?

λ yarn --version
0.16.1

Je suis sur macOS 10.12.1, installé Yarn avec Homebrew.

Et voici le package.json sur lequel j'ai essayé.

ts-loader et webpack-merge sont obsolètes, les mettre à jour avec yarn les a ajoutés aux dépendances, laissant devDependencies obsolète.

@kube Veuillez essayer sur 0.17.0 qui vient de sortir aujourd'hui, ce correctif a été inclus dans cette version, mais pas dans 0.16.1 .

Bien sûr, mais Homebrew a toujours 0.16.1

λ brew upgrade yarn
Error: yarn 0.16.1 already installed

J'ai essayé d'installer avec NPM et j'ai juste eu la dernière version, mais semble étrange d'installer Yarn avec NPM.

Ok tout fonctionne bien lors de l'utilisation de la 0.17.0, mais peut-être devriez-vous mettre à jour la version Brew.
Quel est le gestionnaire de packages préféré ou la manière d'installer Yarn?

Brew est la méthode d'installation préférée pour OSX. Il s'agit toujours d'un processus manuel pour le mettre à jour sur Homebrew, donc quelqu'un devra demander sa mise à jour comme ils l'ont fait ici: https://github.com/Homebrew/homebrew-core/pull/6060

Quand j'exécute yarn upgrade , il ne met à jour aucune version dans package.json . C'est assez ennuyeux de la part de NPM, dans lequel il mettrait automatiquement à jour les chiffres.

J'utilise du fil 0.17.2 de homebrew.

@milesj , cela devrait probablement être un problème séparé et veuillez fournir des étapes pour reproduire avec un package.json que nous pourrions utiliser pour reproduire.

Je vais créer un nouveau problème.

Sur Debian Stable, fil 0.17.4, ce problème semble au moins corrigé. Il a mis lodash@3 jour correctement lodash@4 , donc il pourrait simplement s'agir de passer à la dernière version.

J'essaye de mettre à jour grunt-sass de 1.1.0 à 2.0.0 (dans mes __dev-dependencies__)
J'exécute yarn upgrade [email protected] mais j'ajoute grunt-sass dans mes __dependencies__ et je ne mets pas à niveau celui de __dev-dependencies__

J'ai aussi essayé yarn upgrade [email protected] --dev mais le problème persiste

En utilisant yarn v0.18.1, je ne parviens toujours pas à forcer la mise à jour d'une sous-dépendance. yarn upgrade ajoute uniquement une nouvelle entrée au package.json et ne met pas à jour la sous-dépendance.

Le problème existe toujours dans la version 0.19.1, la mise à niveau du fil n'a pas mis à jour package.json.

@kittens ce n'est pas corrigé par # 1620

Je peux également confirmer ce problème dans la version 0.19.1.

tout le monde - utiliser yarn add <package-name> mettra à jour le package souhaité pour le moment.

yarn upgrade ne fonctionne pas non plus pour moi, v0.19.1

la mise à niveau de yarn actuellement ne met à jour que yarn.lock, pas de mise à jour package.json.

Peut confirmer le problème dans la v0.20.3

J'ai le même problème, lorsque vous utilisez la mise à niveau de fil, cela met à niveau tous les packages, mais ne se reflète pas dans le fichier package.json. v0.20.3 .. vraiment ennuyeux. J'ai également remarqué que lorsque vous utilisez "yarn install", il installe les dernières versions de tous les packages de liste dans package.json et ne s'en tient pas aux versions mentionnées, donc c'est comme si le fil les avait mis à niveau vers la dernière version et ne le reflète pas non plus dans package.json mais cela montre dans yarn.lock les versions actuelles qui ont installé

@kittens v0.20.3 @ Windows et ne met toujours pas à jour package.json - uniquement le fichier yarn.lock. Vous devriez le rouvrir.

Je laisse tomber du fil et je reviens à npm à cause de ce bug. Quelle que soit la manière dont j'essaye de mettre à jour mes packages, yarn récupérera les plus récents dans le cache et conservera les anciennes versions dans mon package.json et dans le dossier node_modules. À quoi ça sert?..

Oui! Je peux confirmer que Yarn v0.21.3 met enfin à jour package.json, au moins yarn upgrade-interactive commande.

@alexdevero je viens d'essayer yarn upgrade sur 3 de mes projets: il n'a mis à jour aucun package.json ....

mais je confirme que yarn upgrade-interactive fonctionne ... pour le premier projet mis à jour
la prochaine utilisation de yarn upgrade-interactive sur d'autres projets nécessitant la même mise à jour échouera, c'est-à-dire "succès Toutes vos dépendances sont à jour."

J'ai testé avec la mise à jour des scripts de réaction de 0.9.x à 0.9.3 sur chacun de mes 3 projets. yarn upgrade-interactive travaillé sur le 1er projet, mais a ensuite ignoré la mise à jour sur 2 autres projets.

À partir d'aujourd'hui, sur la version 0.21.3, yarn upgrade se comporte toujours mal.

J'utilise yarn add package<strong i="7">@version</strong> --dev place, et il met à jour le package comme souhaité et met correctement à jour package.json.

Fwiw, j'ai utilisé upgrade-interactive qui, pour une raison quelconque, semble donner plus de chance.

🍒 🍒 🍒

Il serait bon de savoir quel est le comportement attendu du fil dans ce cas. L'un des développeurs de fils peut-il dire si yarn doit mettre à jour package.json ou non?

Je viens de faire un yarn upgrade babel-cli qui était dans mon devDependencies et il a été ajouté en tant que dépendance de production (à dependencies ) ... quelque chose est encore complètement cassé. Oh, et j'utilise du fil v 0.22.0 btw!

EDIT: Il s'avère que NODE_ENV est réglé sur "production" (car mon application est une application de nœud) et cela gâche des choses comme "yarn install" (qui agira comme yarn install --production et ignorera complètement devDependencies par exemple).

Peut-être que yarn upgrade est également affecté par la variable d'environnement de nœud.

Je viens de réaliser ceci:
image

Je ne suis pas un apologiste ou quoi que ce soit, je pense que cela devrait être rouvert ... mais saintes bals. 720 numéros suffisent pour noyer un bateau de croisière plein de développeurs de fils.

Le problème +1 est toujours présent dans Yarn v0.21.3 sur Windows 10 Professionnel et Node 6.10.0.

Ceci n'est pas corrigé. Je l'obtiens sur macOS Sierra 10.12.4. J'ai quelques devDependencies qui sont des dépôts git privés et un dependency ( "jquery": "^3.1.1" ). La dernière version de jQuery est 3.2.1, et yarn upgrade voit ( ├─ [email protected] ) mais il ne met pas à jour package.json .

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

Rouvrir.

Windows - v0.21.3 échoue avec yarn upgrade ... lors de la spécification d'un package après qu'il mettra à jour package.json et verrouiller le fichier.

Windows - v0.22 -ne met toujours pas à jour package.json mais met à jour le fichier de verrouillage.
a fonctionné en quelque sorte mais n'a pas identifié tous les paquets qui auraient dû être mis à jour et ainsi cassé diverses dépendances entre pairs.

Heureusement, je ne l'ai utilisé que sur un seul projet et j'ai pu renverser la vapeur. J'adore l'idée derrière Yarn mais je ne m'en occuperai pas tant que cela ne sera pas réglé.

Windows, Yarn v0.22 - ne met pas à jour package.json lors de l'utilisation de yarn upgrade comme @LaughingBubba l'a mentionné. Le dossier node_modules est mis à jour, mais package.json ne l'est pas, ce qui crée un désordre dans les versions de package.

@kittens il ne semble pas que cela ait été corrigé.

Je viens de le revoir en 0.23.2.

Dans mon cas, il semble que si au moins 1 des dépendances mises à jour dans une liste n'est PAS un devDep, alors il met toutes les mises à niveau dans les dépendances dans package.json.

Mise à jour: voir également avec la mise à jour d'un seul devDep. Il est copié dans deps sans être mis à niveau.

Ce n'est certainement pas résolu. J'ai perdu une heure là-dessus. Le fil n'était-il pas censé être meilleur que npm?

@ fab1an , pour le moment utilisez yarn add package-name<strong i="6">@latest</strong> [--dev] pour mettre à jour un paquet. Il se comporte comme upgrade , mettant correctement à jour package.json.

@diegovilar Merci pour le conseil, mais c'est trop compliqué pour plus de 25 dépendances de développement. Je viens de recommencer à utiliser npm-check -u pour les mettre à niveau.

Toujours cassé dans Windows x64, Yarn 0.23.2

Pour tous ceux qui commentent ici, je suggère d'utiliser yarn upgrade-interactive en attendant. Cela fonctionne plutôt bien ici.

Toujours cassé et si vous utilisez yarn upgrade-iteractive et que vous ne savez pas de quelle version de tslint, codelyzer, dactylographié, etc. les packages dépendent comme Angular ou la CLI angulaire, vous pouvez et causera un tas d'erreurs qui vous hanteront même après avoir tout roulé. Ce numéro a-t-il été republié?

@milesj NO. Je suis ici et j'utilise UNIQUEMENT upgrade-interactive avec exactement les mêmes problèmes.

Je ne savais pas si cela prenait du temps car il a été fermé pendant des mois, j'ai donc créé un nouveau problème - # 3266

@ fab1an C'est malheureux. Je n'ai eu aucun problème avec la mise à jour de package.json: /

@ fab1an @milesj J'ai eu upgrade-interactive not update package.json sur l'un de nos projets également. On dirait que si vous mettez à niveau et que package.json n'a pas le bon numéro, toutes les mises à niveau interactives ne mettent pas à jour package.json ... ou quelque chose ... de toute façon peut certainement être d'accord avec vous sur le fait que cela ne fonctionne pas parfois.

Windows 10, yarn v0.23.4 ne met toujours pas à jour le package.json lors de l'exécution de yarn upgrade

Edit: C'est peut-être intentionnel?
Par exemple: "semantic-ui-react": "^0.68.2" - il existe déjà une nouvelle version (0.68.3) et cette version est installée et yarn.lock est changé en 0.68.3 mais à cause de ^ dans la version (> = 0.68.2 <0.69.0) il n'est pas nécessaire de mettre à jour package.json en ^0.68.3 ?

@iamfreee J'exécute Yarn v0.24.5 et j'exécute yarn upgrade ne met pas à jour package.json, seulement yarn.lock. Cela ne peut pas (ou du moins ne devrait pas) être intentionnel, car tout d'abord, le contrôle de version dans package.json consiste à définir d'abord la version réelle du package, puis à dicter les contraintes de mise à niveau, c'est- ^ dire ~ . Deuxièmement, exécuter yarn upgrade sur un package individuel modifie package.json, alors pourquoi le comportement lors de la mise à niveau de tous les packages est-il différent? Pourquoi devrait-il y avoir une différence dans le comportement entre l'exécution de yarn upgrade et yarn upgrade-interactive cela n'a aucun sens?

Ce problème est clos depuis un certain temps, donc franchement, il ne suscite aucun intérêt. Nous devrions simplement ouvrir un nouveau numéro. Même si ce comportement est intentionnel, je ne suis toujours pas d'accord avec lui. yarn upgrade ne devrait même pas passer à la balise @latest car que faire si vous avez une contrainte de version différente répertoriée dans votre package.json? Voir ici: https://docs.npmjs.com/cli/update#caret -dependencies

@leosco Dans mon cas, npm update n'a pas non plus mis à jour le package.json et aussi yarn upgrade [package] n'a pas fait l'affaire. C'est pourquoi je pense que le problème est lié à la contrainte de version ^ , ou est le comportement attendu.

@iamfreee Non, vous devez faire npm update --save qui est censé être le comportement par défaut de Yarn.

J'ai posté un nouveau numéro détaillant tout cela, voir ici https://github.com/yarnpkg/yarn/issues/3492 et peut-être continuer la discussion là-bas.

Je voudrais également répéter que j'ai eu du succès avec yarn interactive-upgrade alors que yarn upgrade --latest n'a pas fonctionné pour moi.
Utilisation du fil v0.24.6 avec le nœud v7.10.0.

yarn upgrade --latest fonctionne bien: +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 semble avoir des problèmes maintenant dans la v1.

@milesj Pouvez-vous essayer les versions nocturnes? https://yarnpkg.com/en/docs/nightly Ce PR peut avoir corrigé le problème https://github.com/yarnpkg/yarn/commit/da2b9096057301273aa27336f70622dda09b6c33

@kaylieEB Je ne suis pas certain mais je pense que yarn interactive-upgrade se comporte différemment maintenant. Je l'ai juste exécuté dans un projet avec beaucoup de mises à niveau mineures, et package.json n'a pas été modifié, juste yarn.lock . Avant la 1.0.2, je pense que package.json aurait été synchronisé avec les versions mises à jour, mais je me trompe peut-être à ce sujet ... La dernière version nocturne n'a pas changé ce comportement pour moi.

yarn upgrade --latest fonctionne maintenant très bien, mais j'ai préféré pouvoir choisir de manière interactive ce qu'il faut mettre à niveau, puis faire ajuster le package.json conséquence.

@lehni Il y a aussi yarn interactive-upgrade --latest .

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

Euh ouais, péter le cerveau. Merci.

idem ici avec le fil 1.3.2

idem ici avec le fil 1.5.1

Cassé à nouveau en 1.5.1

rompu avec -

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

même problème nœud v8.9.4
fil 1.5.1

Une solution de contournement: utilisez yarn add au lieu de yarn upgrade .

En bref:

  • yarn upgrade : mettre à niveau les packages vers la dernière plage possible spécifiée par pacakge.json , mais ne pas les écraser
  • yarn add : mettre à jour les packages vers la dernière plage possible et réécrire package.json
  • yarn update , comme npm update : n'existe pas

Cependant, le document de mise à jour de npm dit:

À partir de [email protected] , la mise à jour de npm modifiera package.json pour enregistrer la nouvelle version en tant que dépendance minimale requise. Pour obtenir l'ancien comportement, utilisez npm update --no-save.

Mais en fait...

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

Je ne sais pas lequel utiliser: (Yarn a ajouté ce comportement en 2017, puis l'a cassé silencieusement. Npm prétend l'avoir quand cela ne fonctionne pas non plus.

@kittens Veuillez rouvrir ce numéro.

comme le dit @octref yarn upgrade met package.json . yarn add <package> mettra à jour le package avec sa dernière version s'il est déjà installé et écrasera le package.json . Y a-t-il une raison pour que yarn upgrade ne remplace pas le package.json ? Si tel est le cas, alors peut-être que cela peut être ajouté comme indicateur à yarn upgrade .

[email protected]
[email protected]
os: MacOS

Éditer

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

Une solution de contournement: utilisez yarn add au lieu de yarn upgrade .

Fonctionne comme un charme. Vous devez mettre à jour ces deux pages Docs pour utiliser yarn add au lieu de yarn upgrade .

J'utilise yarn upgrade-interactive --latest depuis un bon moment maintenant sans aucun hoquet ...

J'utilise la mise à niveau interactive du fil depuis un certain temps maintenant sans aucun hoquet ...

Cela semble un peu redondant. Pourquoi ne pas utiliser la plus simple de toutes ces commandes, yarn add ? Super simple.

@ guylepage3 parce que je peux voir quelles mises à niveau sont disponibles dans quelles versions avec un codage couleur différent basé sur des changements de version correctifs / mineurs / majeurs, choisissez celles que je veux mettre à niveau et effectuez plusieurs mises à niveau à la fois de cette façon. Rien de redondant à ce sujet?

@lehni alors la documentation sur le site Web devrait refléter cela et les deux pages suivantes devraient indiquer d'utiliser la méthode yarn upgrade-interactive --latest .

@ guylepage3 cette conversation ne mène nulle part et n'aide pas. Si vous souhaitez suggérer la mise à jour des documents, il peut être préférable de créer un nouveau problème spécifiquement pour cela.

Désolé si vous vous sentez comme ça @alexdevero. Et oui déjà si vous regardez ci-dessus .. https://github.com/yarnpkg/yarn/issues/1458#ref -issue-332178362

Cela m'a aidé: https://www.npmjs.com/package/syncyarnlock

$ yarn upgrade-interactive && syncyarnlock

Cela ne fonctionne pas pour moi pour les espaces de travail de fil. Quelqu'un peut-il jeter un coup d'œil?

Cette page vous a été utile?
0 / 5 - 0 notes