dart pub outdated
Outdated は pub tool のコマンドの1つです。
$ dart pub outdated [options]dart pub outdated を使用して、古い パッケージ依存関係を特定し、それらを更新する方法に関するアドバイスを取得します。 依存関係管理のベストプラクティスには、最新の安定パッケージバージョンを使用することが含まれており、これにより最新のバグ修正と改善を得ることができます。
概要
#ここでは、dart pub outdated を使用して、自分が所有するパッケージ(アプリまたは通常のパッケージのいずれか)の依存関係を更新する方法を示します。
- パッケージにソース管理にチェックインされた
pubspec.lockファイルがない場合は、パッケージのトップディレクトリ(パッケージのpubspec.yamlファイルが含まれるディレクトリ)でdart pub getを実行してください。 dart pub outdatedを実行して、どのパッケージ依存関係が古いかを特定します。影響を受けるパッケージをメモしておき、後でそれらを使用するコードの動作をテストできるようにします。dart pub outdatedの推奨事項に従ってパッケージを更新します。一部の更新ではdart pub upgradeを実行するだけで済む場合があります。他の更新では、dart pub upgradeを実行する前にpubspec.yamlを更新する必要がある場合があります。dart pub outdatedを実行して、最新の互換性のあるパッケージバージョンを使用していることを確認します。- パッケージをテストして、期待どおりに動作することを確認します。
依然として、推移的な依存関係により古い依存関係がある場合があります。原因を特定したい場合は、dart pub deps を実行し、出力から各古いパッケージの名前を検索してみてください。
例
#ここでは、いくつかの古い依存関係がある例で dart pub outdated を実行した例を示します。3つの依存関係(args、http、path)は直接的であり、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.1pubspec.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 はすべての依存関係をリストします。