Yarn: La actualización de Yarn no actualiza correctamente `package.json` para las dependencias de desarrollo

Creado en 25 oct. 2016  ·  83Comentarios  ·  Fuente: yarnpkg/yarn

¿Quieres solicitar una _función_ o informar de un _ error_?

_insecto_

¿Cuál es el comportamiento actual?

Ejecutar yarn upgrade para actualizar una dependencia de desarrollo, incluso con el indicador --dev , agregará la versión mejorada de la dependencia al hash dependencies en package.json lugar de devDependencies .

Esto también podría ser un problema con otros tipos de dependencia (como pares), pero no lo he probado.

Si el comportamiento actual es un error, proporcione los pasos para reproducirlo.

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

¿Cuál es el comportamiento esperado?

yarn upgrade debería actualizar la cadena de versión de la entrada en el hash devDependencies .

Sería bueno si esto se pudiera hacer sin --dev usando la ubicación actual de la dependencia (actualizar un departamento de desarrollo modificaría devDependencies , actualizar un departamento normal modificaría dependencies ) .

Por favor, mencione su versión de node.js, yarn y sistema operativo.

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

Comentario más útil

lo mismo aquí con hilo 1.3.2

Todos 83 comentarios

Puedo confirmar que veo que esto sucede exactamente en la misma versión de Yarn. En lugar de actualizar la dependencia de desarrollo existente, agrega una nueva entrada a "dependencias" y deja allí la dependencia de desarrollo existente.

Error confirmado aquí también.

Igual que aquí. standard sigue insertándose en dependencies a pesar de que vive en devDependencies .

He probado tanto yarn upgrade standard como yarn upgrade standard -D . La misma cosa.

¡Sin embargo, un programa encantador! ¡Gracias por construirlo!

Aquí está el mismo problema, un poco antes - # 1262

Igual que aquí.

Igual que aquí. Cada módulo actualizado a través de yarn update se agrega a dependencies .
--dev u otras opciones no están documentadas para yarn update y aparentemente se ignoran.

La actualización de la OMI debería aceptar las mismas opciones que install , o incluso actualizar mejor la dependencia en la categoría en la que se encuentra en package.json

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

1620 corrige esto, así que voy a cerrar esto y mover la discusión allí.

Aún sin arreglar, estoy usando el último Yarn instalado a través de Homebrew.

@kube ¿Podría agregar más detalles si aún es un problema? ¿Versiones para SO, Node, Yarn? ¿Un package.json que se puede usar para reproducir?

λ yarn --version
0.16.1

Estoy en macOS 10.12.1, instalé Yarn con Homebrew.

Y aquí está el package.json en el que probé.

ts-loader y webpack-merge están desactualizados, actualizándolos con yarn los agregó a las dependencias, dejando a devDependencies desactualizadas.

@kube Por favor, pruebe con 0.17.0 que se acaba de lanzar hoy, esta corrección se incluyó en esa versión, pero no en 0.16.1 .

Claro, pero Homebrew todavía tiene 0.16.1

λ brew upgrade yarn
Error: yarn 0.16.1 already installed

Intenté instalar con NPM y acabo de tener la última versión, pero parece extraño instalar Yarn con NPM.

Ok, todo funciona bien cuando se usa 0.17.0, pero tal vez debería actualizar la versión Brew.
¿Cuál es el administrador de paquetes preferido o la forma de instalar Yarn?

Brew es el método preferido de instalación para OSX. Sigue siendo un proceso manual para actualizarlo en Homebrew, por lo que alguien tendrá que solicitar que se actualice como lo hizo aquí: https://github.com/Homebrew/homebrew-core/pull/6060

Cuando ejecuto yarn upgrade , no actualiza ninguna versión en package.json . Esto es bastante molesto viniendo de NPM, en el que actualizaría automáticamente los números.

Estoy usando hilo 0.17.2 de homebrew.

@milesj , esto probablemente debería ser un problema separado y proporcione los pasos para reproducir junto con un package.json que podamos usar para reproducir.

Crearé un nuevo problema.

En Debian Stable, yarn 0.17.4, este problema parece estar solucionado al menos. Actualizó lodash@3 a lodash@4 correctamente, por lo que podría ser solo una cuestión de ir a la última versión.

Estoy intentando actualizar grunt-sass de 1.1.0 a 2.0.0 (en mi __dev-dependencies__)
Ejecuto yarn upgrade [email protected] pero agrego grunt-sass en mis __dependencias__ y no actualizo el de __dev-dependencies__

También probé yarn upgrade [email protected] --dev pero el problema persiste

Usando yarn v0.18.1 todavía no puedo forzar una actualización de una subdependencia. yarn upgrade solo agrega una nueva entrada al package.json y no actualiza la subdependencia.

El problema aún existe en 0.19.1, la actualización de hilo no actualizó package.json.

@kittens esto no está arreglado por # 1620

También puedo confirmar este problema en 0.19.1.

todos: el uso de yarn add <package-name> actualizará el paquete deseado por ahora.

yarn upgrade tampoco me funciona, v0.19.1

La actualización de yarn actualmente solo actualiza yarn.lock, no actualiza package.json.

Puede confirmar el problema en v0.20.3

Tengo el mismo problema, cuando uso la actualización de hilo, actualiza todos los paquetes, pero no se refleja en el archivo package.json. v0.20.3 .. realmente molesto. También noté que cuando uso "yarn install", instala las últimas versiones de todos los paquetes de lista en package.json y no se queda con las versiones mencionadas en él, por lo que es como si yarn las actualizara a la última versión y tampoco refleja eso en package.json pero se muestra en yarn.lock versiones actuales que instalaron

@kittens v0.20.3 @ Windows y aún no actualiza package.json, solo archivo yarn.lock. Deberías volver a abrir esto.

Estoy dejando caer hilo y volviendo a npm debido a este error. No importa cómo intente actualizar mis paquetes, yarn buscará los más nuevos en el caché y mantendrá las versiones anteriores en mi package.json y en la carpeta node_modules. ¿Cuál es el punto de?..

¡Si! Puedo confirmar que Yarn v0.21.3 finalmente actualiza package.json, al menos yarn upgrade-interactive command.

@alexdevero acabo de probar yarn upgrade en 3 proyectos míos: no actualizó ningún package.json ....

pero confirmo que yarn upgrade-interactive funciona ... para el primer proyecto actualizado
el próximo uso de yarn upgrade-interactive en otros proyectos que necesiten la misma actualización fallará, es decir, "éxito Todas sus dependencias están actualizadas".

Probé con la actualización de los scripts de reacción de 0.9.xa 0.9.3 en cada uno de mis 3 proyectos. yarn upgrade-interactive trabajó en el primer proyecto, pero luego ignoró la actualización en otros 2 proyectos.

A partir de hoy, en la versión 0.21.3, yarn upgrade todavía se comporta de forma incorrecta.

Estoy usando yarn add package<strong i="7">@version</strong> --dev lugar, y actualiza el paquete como se desea y actualiza package.json correctamente.

Fwiw, he estado usando upgrade-interactive que por alguna razón parece dar mejor suerte.

🍒 🍒 🍒

Sería bueno saber cuál es el comportamiento esperado del hilo en este caso. ¿Puede alguno de los desarrolladores de hilo decir si el hilo debería actualizar package.json o no?

Acabo de hacer un yarn upgrade babel-cli que estaba en mi devDependencies y se agregó como una dependencia de producción (a dependencies ) ... algo aún está completamente roto. ¡Ah, y uso hilo v 0.22.0 por cierto!

EDITAR: Resulta que tenía NODE_ENV configurado en "producción" (debido a que mi aplicación es una aplicación de nodo) y esto estropea cosas como "instalación de hilo" (que actuará como yarn install --production y omitir completamente devDependencies por ejemplo).

Quizás yarn upgrade también se vea afectado por la variable de entorno del nodo.

Me acabo de dar cuenta de esto:
image

No soy apologista ni nada, creo que esto debería reabrirse ... pero bailes santos. 720 números son suficientes para ahogar un crucero lleno de desarrolladores de hilos.

El problema +1 todavía está presente en Yarn v0.21.3 en Windows 10 Pro y Node 6.10.0.

Esto no está arreglado. Lo estoy obteniendo en macOS Sierra 10.12.4. Tengo algunos devDependencies que son repositorios privados de git y uno estándar dependency ( "jquery": "^3.1.1" ). La última versión de jQuery es 3.2.1, y yarn upgrade ve eso ( ├─ [email protected] ) pero no actualiza package.json .

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

Reabrir.

Windows: v0.21.3 falla con yarn upgrade ... al especificar un paquete después de que actualice tanto package.json como el archivo de bloqueo.

Windows - v0.22 -todavía no actualiza package.json pero actualiza el archivo de bloqueo.
funcionó de algún modo, pero no identificó todos los paquetes que deberían haberse actualizado y, por lo tanto, rompió varias dependencias de pares.

Afortunadamente, solo lo usé en un proyecto y pude revertir el desastre. Me encanta la idea detrás de Yarn, pero no me molestaré con ella hasta que esto esté resuelto.

Windows, Yarn v0.22 - no actualiza package.json cuando se usa yarn upgrade como mencionó @LaughingBubba . La carpeta node_modules se actualiza, pero package.json no, lo que crea un lío en las versiones del paquete.

@kittens , no parece que esto se haya solucionado.

Acabo de ver esto de nuevo en 0.23.2.

En mi caso, parece que si al menos 1 de las dependencias actualizadas en una lista NO es un devDep, entonces coloca todas las actualizaciones en dependencias en package.json.

Actualización: también lo veo con la actualización de un solo devDep. Se copia en departamentos sin actualizarse.

Esto definitivamente no está arreglado. Perdí una hora ahora en esto. ¿No se suponía que el hilo era mejor que el npm?

@ fab1an , por el momento use yarn add package-name<strong i="6">@latest</strong> [--dev] para actualizar un paquete. Se comporta como se espera que lo haga upgrade , actualizando package.json correctamente.

@diegovilar Gracias por el consejo, pero eso es demasiado engorroso para más de 25 dependencias de desarrollo. Acabo de volver a usar npm-check -u para actualizarlos.

Aún roto en Windows x64, Yarn 0.23.2

Para todos los que comentan aquí, sugiero usar yarn upgrade-interactive mientras tanto. Ha funcionado bastante bien aquí.

Aún está roto y si usa yarn upgrade-iteractive y no sabe de qué versión de tslint, codelyzer, mecanografiado, etc., dependen los paquetes, como Angular o Angular CLI, puede y causará un montón de errores que lo perseguirán incluso después de revertirlo todo. ¿Se ha vuelto a publicar este problema?

@milesj NO. Estoy aquí y he estado usando SOLO upgrade-interactive con exactamente los mismos problemas.

No estaba seguro de si esto se estaba poniendo cara a cara ya que ha estado cerrado durante meses, así que creó un nuevo problema: # 3266

@ fab1an Eso es lamentable. No he tenido problemas con la actualización de package.json: /

@ fab1an @milesj También he tenido upgrade-interactive not update package.json en uno de nuestros proyectos. Parecía que si actualiza y package.json no tiene el número correcto, entonces todas las actualizaciones interactivas no actualizan package.json ... o algo ... de cualquier manera definitivamente puede estar de acuerdo con usted en que a veces no funciona.

Windows 10, yarn v0.23.4 todavía no actualiza el package.json al hacer yarn upgrade

Editar: ¿Quizás esto es intencional?
Por ejemplo: "semantic-ui-react": "^0.68.2" - ya hay una nueva versión (0.68.3) y esa versión está instalada y yarn.lock se cambia a 0.68.3 pero debido a ^ en la versión (> = 0.68.2 <0.69.0) no es necesario actualizar package.json a ^0.68.3 ?

@iamfreee Estoy ejecutando Yarn v0.24.5 y ejecutando yarn upgrade no actualiza package.json, solo yarn.lock. Esto no puede (o al menos no debería) ser intencional, porque en primer lugar, el control de versiones en package.json es establecer primero la versión real del paquete y luego dictar las restricciones de actualización, es decir, ^ o ~ . En segundo lugar, ejecutar yarn upgrade en un paquete individual cambia el package.json, entonces, ¿por qué el comportamiento al actualizar todos los paquetes es diferente? ¿Por qué debería haber una discrepancia en el comportamiento entre ejecutar yarn upgrade y yarn upgrade-interactive si no tiene sentido?

Este problema ha estado cerrado por un tiempo, así que, francamente, no está recibiendo tracción. Deberíamos abrir una nueva edición. Incluso si este comportamiento es intencional, todavía no estoy de acuerdo con él. yarn upgrade ni siquiera debería actualizar a la etiqueta @latest porque ¿qué https://docs.npmjs.com/cli/update#caret -dependencies

@leosco En mi caso npm update no actualizó el package.json también y también yarn upgrade [package] no funcionó. Es por eso que creo que el problema está relacionado con la restricción de versión ^ , o es el comportamiento esperado.

@iamfreee No, tienes que hacer npm update --save que se supone que es el comportamiento predeterminado de Yarn.

Publiqué un nuevo número que detalla todo esto, vea aquí https://github.com/yarnpkg/yarn/issues/3492 y tal vez continúe la discusión allí.

También me gustaría repetir que he tenido éxito con yarn interactive-upgrade mientras que yarn upgrade --latest no me ha funcionado.
Usando yarn v0.24.6 con el nodo v7.10.0.

yarn upgrade --latest funciona 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 parece tener problemas ahora en v1.

@milesj ¿Puedes probar las construcciones nocturnas? https://yarnpkg.com/en/docs/nightly Este RP puede haberlo solucionado https://github.com/yarnpkg/yarn/commit/da2b9096057301273aa27336f70622dda09b6c33

@kaylieEB No estoy seguro, pero creo que yarn interactive-upgrade comporta package.json no se modificó, solo yarn.lock . Antes de la 1.0.2, creo que package.json se habría mantenido sincronizado con las versiones actualizadas, pero puedo estar equivocado sobre esto ... La última compilación nocturna no cambió ese comportamiento para mí.

yarn upgrade --latest ahora funciona bien, pero preferí poder elegir interactivamente qué actualizar, y luego ajustar el package.json consecuencia.

@lehni También hay yarn interactive-upgrade --latest .

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

Err sí, pedo cerebral. Gracias.

lo mismo aquí con hilo 1.3.2

lo mismo aquí con hilo 1.5.1

Roto en 1.5.1 de nuevo

roto con -

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

mismo problema nodo v8.9.4
hilo 1.5.1

Una solución alternativa: use yarn add lugar de yarn upgrade .

En breve:

  • yarn upgrade : actualizar los paquetes al último rango posible especificado por pacakge.json , pero no sobrescribir
  • yarn add : actualizar los paquetes al último rango posible y reescribir package.json
  • yarn update , como npm update : no existe

Sin embargo, el documento de la actualización de npm dice:

A partir de [email protected] , la actualización de npm cambiará package.json para guardar la nueva versión como la dependencia mínima requerida. Para obtener el comportamiento anterior, use npm update --no-save.

Pero, de hecho...

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

No sé cuál usar :( Yarn agregó este comportamiento en algún momento de 2017 y luego lo rompió en silencio. Npm afirma tenerlo cuando tampoco funciona.

@kittens Vuelve a abrir este problema.

como dice @octref yarn upgrade actualiza las dependencias a su última versión pero no sobrescribe el package.json . yarn add <package> actualizará el paquete a su última versión si ya está instalado y sobrescribirá el package.json . ¿Hay alguna razón para que yarn upgrade no sobrescriba el package.json ? Si es así, entonces tal vez se pueda agregar como una bandera a yarn upgrade .

[email protected]
[email protected]
os: MacOS

Editar

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

Una solución alternativa: use yarn add lugar de yarn upgrade .

Funciona de maravilla. Necesita actualizar estas dos páginas de Docs para usar yarn add lugar de yarn upgrade .

He estado usando yarn upgrade-interactive --latest durante bastante tiempo sin ningún problema ...

He estado usando la actualización interactiva de hilo, últimamente durante bastante tiempo sin ningún problema ...

Parece un poco redundante ... ¿Por qué no usar el más fácil de todos estos comandos, yarn add ? Super simple.

@ guylepage3 porque puedo ver qué actualizaciones están disponibles en qué versiones con diferentes

@lehni, entonces la documentación en el sitio web debe reflejar esto y las dos páginas siguientes deben indicar que se debe usar el método yarn upgrade-interactive --latest .

@ guylepage3 esta conversación no lleva a ninguna parte ni ayuda. Si desea sugerir la actualización de los documentos, podría ser mejor crear un nuevo problema específicamente para eso.

Perdón si te sientes así @alexdevero. Y sí, ya lo hizo si mira arriba ... https://github.com/yarnpkg/yarn/issues/1458#ref -issue-332178362

Esto me ayudó: https://www.npmjs.com/package/syncyarnlock

$ yarn upgrade-interactive && syncyarnlock

Esto no me funciona para los espacios de trabajo de hilo. ¿Alguien puede echar un vistazo?

¿Fue útil esta página
0 / 5 - 0 calificaciones