メインコンテンツにスキップ

dart pub outdated

Outdatedpub tool のコマンドの1つです。

$ dart pub outdated [options]

dart pub outdated を使用して、古い パッケージ依存関係を特定し、それらを更新する方法に関するアドバイスを取得します。 依存関係管理のベストプラクティスには、最新の安定パッケージバージョンを使用することが含まれており、これにより最新のバグ修正と改善を得ることができます。

概要

#

ここでは、dart pub outdated を使用して、自分が所有するパッケージ(アプリまたは通常のパッケージのいずれか)の依存関係を更新する方法を示します。

  1. パッケージにソース管理にチェックインされた pubspec.lock ファイルがない場合は、パッケージのトップディレクトリ(パッケージの pubspec.yaml ファイルが含まれるディレクトリ)でdart pub get を実行してください。
  2. dart pub outdated を実行して、どのパッケージ依存関係が古いかを特定します。影響を受けるパッケージをメモしておき、後でそれらを使用するコードの動作をテストできるようにします。
  3. dart pub outdated の推奨事項に従ってパッケージを更新します。一部の更新では dart pub upgrade を実行するだけで済む場合があります。他の更新では、dart pub upgrade を実行する前に pubspec.yaml を更新する必要がある場合があります。
  4. dart pub outdated を実行して、最新の互換性のあるパッケージバージョンを使用していることを確認します。
  5. パッケージをテストして、期待どおりに動作することを確認します。

依然として、推移的な依存関係により古い依存関係がある場合があります。原因を特定したい場合は、dart pub deps を実行し、出力から各古いパッケージの名前を検索してみてください。

#

ここでは、いくつかの古い依存関係がある例で dart pub outdated を実行した例を示します。3つの依存関係(argshttppath)は直接的であり、1つは推移的(meta)です。以下の例が示すように、dart pub outdated はデフォルトでコマンドラインで実行すると、出力を色付けします。

$ 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.

Resolvable カラムは、各古い依存関係のアップグレード先バージョンを示します。左端の、赤色ではない値を持つカラムを探すことで、さらに情報を得ることができます。たとえば、args は 1.6.0 に *アップグレード可能* で、http は 0.12.1 に *解決可能* です。path および meta パッケージは最新バージョンではありませんが、他のすべての依存関係を考慮すると、最も現在の *解決可能* なバージョンです。

最初(args)の依存関係を修正するには、アップグレード可能としてリストされているので、dart pub upgrade を実行するだけです。

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

2番目(http)の依存関係を修正するには、解決可能としてリストされているので、pubspec の http エントリを **Resolvable** カラムのバージョン(またはそれより高い互換性のあるバージョン)を使用するように変更できます。 キャレット構文では、それは **^0.12.1** です。以下は pubspec.yaml の差分です。

-  http: ^0.11.0
+  http: ^0.12.1

pubspec.yaml を編集した後、pubspec.lock ファイルを更新するために dart pub upgrade を実行します。その後、dart pub outdated を実行して、必要なすべての変更を行ったことを確認できます。この例では、path および meta パッケージは、他の依存関係によって決定される制約により、依然として古いままです。

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.

これらのパッケージが古い理由を確認するには、dart pub deps を実行し、これらのパッケージへの依存関係を探します。

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

前述の出力が示すように、このパッケージは terminal_tools パッケージに依存しており、これは path および meta の古いバージョンに依存しています。terminal_tools パッケージが更新されると、このパッケージを更新できるようになるはずです。

出力カラム

#

dart pub outdated の出力には、古い依存関係ごとに4つのバージョン情報カラムがあります。以下は、Current、Upgradable、Resolvable、および Latest を示す の出力の一部です。

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
Current
pubspec.lock に記録されている、パッケージで使用されているバージョン。パッケージが pubspec.lock にない場合、値は - です。
Upgradable
pubspec.yaml ファイルによって許可される最新バージョン。これは dart pub upgrade が解決するバージョンです。Current カラムの値が - の場合、値は - です。
Resolvable
他のすべての依存関係と組み合わせたときに解決可能な最新バージョン。このバージョンは、pubspec.yaml のすべてのバージョン制約が無制限の場合に dart pub upgrade が提供するものに対応します。 - の値は、パッケージが必要なくなることを意味します。
Latest
利用可能なパッケージの最新バージョン。--prereleases オプションを使用しない限り、プレリリースは除外されます。

たとえば、アプリが foo および bar パッケージに依存しているが、bar の最新バージョンが foo の古いメジャーバージョンしか許可しないとします。その結果、foo の最新の *解決可能* バージョンは、foo の *最新* バージョンとは異なります。

pubspec.yaml ファイルを編集する際は、通常、dependencies および dev_dependencies セクションを更新して、各パッケージが **Resolvable** カラムのバージョンを使用するようにします。

オプション

#

すべての pub コマンドに適用されるオプションについては、グローバルオプション を参照してください。

--[no-]dependency-overrides

#

デフォルトでは、パッケージ制約の解決時に dependency_overrides を考慮します(--dependency-overrides)。オーバーライドを考慮しない場合は、--no-dependency-overrides を使用します。

--[no-]dev-dependencies

#

デフォルトでは、パッケージ制約の解決時に dev dependencies を考慮します(--dev-dependencies)。dev dependencies を考慮しない場合は、--no-dev-dependencies を使用します。

--json

#

JSON形式で出力を生成します。

--[no-]prereleases

#

デフォルトでは、最後のパッケージバージョンの決定時にプレリリースを含みます(--prereleases)。プレリリースを考慮しない場合は、--no-prereleases を使用します。

--[no-]transitive

#

デフォルトでは、出力の一部として 推移的な依存関係を含みません(--no-transitive)。推移的な依存関係を含める場合は、--transitive を使用します。

--[no-]up-to-date

#

デフォルトでは、最新バージョンの依存関係を含みません(--no-up-to-date)。最新バージョンの依存関係を含める場合は、--up-to-date を使用します。

ワークスペース内

#

Pubワークスペースでは、dart pub outdated はすべての依存関係をリストします。