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
を実行してください。)