Saltar al contenido principal

dart pub outdated

Usa dart pub outdated para ayudarte a actualizar las dependencias de tu paquete.

Outdated es uno de los comandos de la herramienta pub (pub tool).

$ dart pub outdated [options]

Usa dart pub outdated para identificar dependencias de paquetes desactualizadas y obtener consejos sobre cómo actualizarlas. Las mejores prácticas para la gestión de dependencias incluyen el uso de las versiones estables más recientes de los paquetes, para que puedas obtener las últimas correcciones de errores y mejoras.

Descripción general

#

Así es como puedes usar dart pub outdated para ayudarte a actualizar las dependencias de un paquete de tu propiedad (ya sea una aplicación o un paquete normal):

  1. Si tu paquete no tiene un archivo pubspec.lock registrado en el control de versiones, ejecuta dart pub get en el directorio principal del paquete, el directorio que contiene el archivo pubspec.yaml de tu paquete.
  2. Ejecuta dart pub outdated para identificar qué dependencias de paquetes están desactualizadas. Toma nota de los paquetes afectados, para que luego puedas probar el comportamiento del código que los utiliza.
  3. Sigue las recomendaciones de dart pub outdated para actualizar los paquetes. Algunas actualizaciones pueden requerir únicamente ejecutar dart pub upgrade. Otras pueden requerir actualizar pubspec.yaml antes de ejecutar dart pub upgrade.
  4. Ejecuta dart pub outdated para confirmar que estás utilizando las últimas versiones compatibles de los paquetes.
  5. Prueba tu paquete para confirmar que sigue funcionando como se espera.

Es posible que sigas teniendo dependencias desactualizadas debido a dependencias transitivasDependencia transitivaUna dependencia que un paquete utiliza indirectamente porque una de sus dependencias la requiere. Obtén más información. Si deseas determinar la causa, intenta ejecutar dart pub deps y buscar en la salida el nombre de cada paquete desactualizado.

Ejemplo

#

Aquí tienes un ejemplo de la ejecución de dart pub outdated en un ejemplo que tiene varias dependencias desactualizadas. Tres de las dependencias (args, http y path) son directas, y una es transitiva (meta). Como muestra el siguiente ejemplo, dart pub outdated colorea la salida de forma predeterminada cuando lo ejecutas en la línea de comandos.

$ dart pub outdated

Package Name  Current    Upgradable  Resolvable  Latest

direct dependencies:
args          1.4.4      1.6.0       1.6.0       1.6.0
http          0.11.3+17  0.11.3+17   0.12.1      0.12.1
path          1.6.2      1.6.2       1.6.2       1.7.0

dev_dependencies: all up-to-date

transitive dependencies:
meta          1.1.6      1.1.6       1.1.6       1.1.8

transitive dev_dependencies: all up-to-date

1 upgradable dependency is locked (in pubspec.lock) to an older version.
To update it, use `dart pub upgrade`.

1 dependency is constrained to a version that is older than a resolvable version.
To update it, edit pubspec.yaml.

La columna Resolvable muestra a qué versiones puedes actualizar para cada dependencia desactualizada. Puedes obtener más información buscando la columna más a la izquierda con un valor que no esté en rojo. Por ejemplo, args es actualizable (upgradable) a la 1.6.0, y http es resoluble (resolvable) a la 0.12.1. Los paquetes path y meta no están en sus últimas versiones, pero son las versiones más recientes resolubles, considerando todas las demás dependencias.

Para solucionar la primera dependencia (args), la cual figura como actualizable, solo necesitas ejecutar dart pub upgrade:

dart pub upgrade
Resolving dependencies...
> args 1.6.0 (was 1.4.4)
  ...
Changed 1 dependency!

Para solucionar la segunda dependencia (http), la cual figura como resoluble, puedes modificar la entrada de http en el pubspec para usar la versión de la columna Resolvable (o una versión superior compatible). En la sintaxis de circunflejo (caret syntax), eso es ^0.12.1. Aquí está la diferencia (diff) para pubspec.yaml:

-  http: ^0.11.0
+  http: ^0.12.1

Después de editar pubspec.yaml, ejecutas dart pub upgrade para actualizar el archivo pubspec.lock. Luego puedes ejecutar dart pub outdated para confirmar que has realizado todos los cambios necesarios. En este ejemplo, los paquetes path y meta siguen estando desactualizados, debido a restricciones determinadas por otras dependencias:

dart pub upgrade
...
dart pub outdated
Package Name  Current  Upgradable  Resolvable  Latest

direct dependencies:
path          1.6.2    1.6.2       1.6.2       1.7.0

dev_dependencies: all up-to-date

transitive dependencies:
meta          1.1.6    1.1.6       1.1.6       1.1.8

transitive dev_dependencies: all up-to-date

Dependencies are all on the latest resolvable versions.
Newer versions, while available, are not mutually compatible.

Para ver por qué estos paquetes están desactualizados, puedes ejecutar dart pub deps y buscar dependencias de estos paquetes:

dart pub deps -s list
...
dependencies:
...
- terminal_tools 0.1.0
  - path 1.6.2
  - meta 1.1.6
...

Como muestra la salida anterior, este paquete depende del paquete terminal_tools, el cual depende de versiones antiguas de path y meta. Una vez que se actualice el paquete terminal_tools, debería ser posible actualizar este paquete.

Columnas de salida

#

La salida de dart pub outdated tiene cuatro columnas de información de versión para cada dependencia desactualizada. Aquí está la parte de la salida de ejemplo que muestra las cuatro columnas de versión: Current (Actual), Upgradable (Actualizable), Resolvable (Resoluble), y Latest (Última).

Package Name  Current    Upgradable  Resolvable  Latest

direct dependencies:
args          1.4.4      1.6.0       1.6.0       1.6.0
http          0.11.3+17  0.11.3+17   0.12.1      0.12.1
path          1.6.2      1.6.2       1.6.2       1.7.0

dev_dependencies: all up-to-date

transitive dependencies:
meta          1.1.6      1.1.6       1.1.6       1.1.8
Actual (Current)

La versión utilizada en tu paquete, tal como está registrada en pubspec.lock. Si el paquete no está en pubspec.lock, el valor es -.

Actualizable (Upgradable)

La última versión permitida por tu archivo pubspec.yaml. Esta es la versión a la que se resuelve con dart pub upgrade. El valor es - si el valor en la columna Current es -.

Resoluble (Resolvable)

La última versión que se puede resolver, al combinarse con todas las demás dependencias. Esta versión corresponde a la que te proporciona dart pub upgrade si todas las restricciones de versión en pubspec.yaml fuesen ilimitadas (unbounded). Un valor de - significa que el paquete no será necesario.

Última (Latest)

La última versión disponible del paquete, excluyendo las versiones preliminares (prereleases) a menos que utilices la opción --prereleases.

Por ejemplo, supongamos que tu aplicación depende de los paquetes foo y bar, pero la última versión de bar solo permite versiones principales (major) más antiguas de foo. El resultado es que la última versión resoluble (resolvable) de foo es diferente de la última (latest) versión de foo.

Al editar el archivo pubspec.yaml, generalmente actualizas las secciones dependencies y dev_dependencies para que cada paquete utilice las versiones de la columna Resolvable.

Opciones

#

Para conocer las opciones que se aplican a todos los comandos de pub, consulta Opciones globales.

--[no-]dependency-overrides

#

Por defecto, tiene en cuenta las dependency_overrides al resolver las restricciones de los paquetes (--dependency-overrides). Para no tener en cuenta las sobreescrituras (overrides), utiliza --no-dependency-overrides.

--[no-]dev-dependencies

#

Por defecto, tiene en cuenta las dependencias de desarrollo (dev dependencies) al resolver las restricciones de los paquetes (--dev-dependencies). Para no tener en cuenta las dependencias de desarrollo, utiliza --no-dev-dependencies.

--json

#

Genera la salida en formato JSON.

--[no-]prereleases

#

Por defecto, incluye versiones preliminares (prereleases) al determinar las últimas versiones de los paquetes (--prereleases). Para no tener en cuenta las versiones preliminares, utiliza --no-prereleases.

--[no-]transitive

#

Por defecto, no incluye dependencias transitivasDependencia transitivaUna dependencia que un paquete utiliza indirectamente porque una de sus dependencias la requiere. Obtén más información como parte de la salida (--no-transitive). Para incluir las dependencias transitivas, utiliza --transitive.

--[no-]up-to-date

#

Por defecto, no incluye dependencias que se encuentren en su última versión (--no-up-to-date). Para incluir dependencias actualizadas, utiliza --up-to-date.

En un espacio de trabajo (workspace)

#

En un espacio de trabajo de Pub (Pub workspace), dart pub outdated lista todas las dependencias.