Corepack
追加: v16.9.0, v14.19.0
Corepack は、パッケージマネージャーのバージョン管理を支援する実験的なツールです。これは、サポートされているパッケージマネージャーごとにバイナリプロキシを公開し、呼び出されると、現在のプロジェクト用に構成されたパッケージマネージャーを識別し、必要に応じてダウンロードし、最後に実行します。
Corepack は Node.js のデフォルトインストールで配布されますが、Corepack が管理するパッケージマネージャーは Node.js ディストリビューションの一部ではありません。
- 初めて使用する際、Corepack はネットワークから最新バージョンをダウンロードします。
- (セキュリティ脆弱性などに関連する)必要な更新は、Node.js プロジェクトの範囲外です。必要に応じて、エンドユーザーは自身で更新方法を見つける必要があります。
この機能は、次の 2 つのコアワークフローを簡素化します。
- 新しいコントリビューターのオンボーディングを容易にします。必要なパッケージマネージャーを手に入れるためだけに、システム固有のインストールプロセスに従う必要がなくなるためです。
- チーム内の全員が、更新が必要なときに毎回手動で同期する必要なく、あなたが意図したパッケージマネージャーのバージョンを正確に使用することを保証できます。
ワークフロー
機能の有効化
実験的ステータスであるため、Corepack を有効にするには明示的に有効にする必要があります。そのためには、corepack enable
を実行します。これにより、node
バイナリの横に環境のシンボリックリンクが設定されます(既存のシンボリックリンクがある場合は上書きされます)。
この時点から、サポートされているバイナリへの呼び出しは、追加の設定なしで機能します。問題が発生した場合は、corepack disable
を実行して、システムからプロキシを削除してください(また、Corepack リポジトリに問題を報告することを検討してください)。
パッケージの設定
Corepack プロキシは、現在のディレクトリ階層で最も近いpackage.json
ファイルを検索し、その"packageManager"
プロパティを抽出します。
値がサポートされているパッケージマネージャに対応している場合、Corepack は関連するバイナリへのすべての呼び出しが要求されたバージョンに対して実行されるようにし、必要に応じてオンデマンドでダウンロードし、正常に取得できなかった場合は中断します。
corepack use
を使用して、Corepack にローカルのpackage.json
を更新して、選択したパッケージマネージャを使用するように要求できます。
corepack use # package.jsonに最新の7.xバージョンを設定します
corepack use yarn@* # package.jsonに最新バージョンを設定します
グローバルバージョンのアップグレード
既存のプロジェクトの外部で実行する場合(たとえば、yarn init
を実行する場合)、Corepack はデフォルトで各ツールからの最新の安定リリースにほぼ対応する事前定義されたバージョンを使用します。これらのバージョンは、設定したいパッケージマネージャのバージョンとともにcorepack install
コマンドを実行することでオーバーライドできます。
corepack install --global
または、タグまたは範囲を使用できます。
corepack install --global pnpm@*
corepack install --global yarn@stable
オフラインワークフロー
多くの本番環境にはネットワークアクセスがありません。Corepack は通常、パッケージマネージャのリリースをレジストリから直接ダウンロードするため、このような環境と競合する可能性があります。それを回避するために、ネットワークアクセスがまだある間(通常、デプロイイメージを準備するときと同じタイミングで)、corepack pack
コマンドを呼び出します。これにより、ネットワークアクセスがなくても必要なパッケージマネージャが利用可能になります。
pack
コマンドにはさまざまなフラグがあります。詳細については、詳細なCorepack ドキュメントを参照してください。
サポートされているパッケージマネージャー
以下のバイナリは Corepack を通じて提供されます。
パッケージマネージャー | バイナリ名 |
---|---|
Yarn | yarn , yarnpkg |
pnpm | pnpm , pnpx |
よくある質問
Corepack は npm とどのように連携しますか?
Corepack は他のパッケージマネージャーと同様に npm をサポートできますが、そのシムはデフォルトでは有効になっていません。これにはいくつかの結果が伴います。
- Corepack がそれを傍受できないため、別のパッケージマネージャーを使用するように構成されたプロジェクト内で
npm
コマンドを実行することは常に可能です。 npm
は"packageManager"
プロパティの有効なオプションですが、シムがないため、グローバル npm が使用されます。
npm install -g yarn
が動作しない
npm はグローバルインストール時に Corepack バイナリを誤って上書きすることを防ぎます。この問題を回避するには、以下のいずれかのオプションを検討してください。
- このコマンドを実行しないでください。Corepack はいずれにせよパッケージマネージャーのバイナリを提供し、要求されたバージョンが常に利用可能であることを保証するため、パッケージマネージャーを明示的にインストールする必要はありません。
npm install
に--force
フラグを追加します。これにより、npm はバイナリを上書きしても問題ないことを通知しますが、その過程で Corepack のバイナリを消去します。(それらを元に戻すには、corepack enable
を実行してください。)