Corepack#

安定度: 1 - 実験的

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 [email protected] # sets the latest 7.x version in the package.json
corepack use yarn@* # sets the latest version in the package.json 

グローバルバージョンのアップグレード#

既存のプロジェクトの外部で実行する場合(たとえば、yarn initを実行する場合)、Corepackはデフォルトで、各ツールからの最新の安定リリースにほぼ対応する定義済みのバージョンを使用します。これらのバージョンは、設定したいパッケージマネージャーバージョンと一緒にcorepack installコマンドを実行することでオーバーライドできます。

corepack install --global [email protected] 

あるいは、タグまたは範囲を使用することもできます。

corepack install --global pnpm@*
corepack install --global yarn@stable 

オフラインワークフロー#

多くの本番環境では、ネットワークアクセスがありません。Corepackは通常、パッケージマネージャーのリリースをレジストリから直接ダウンロードするため、このような環境と競合する可能性があります。それを回避するために、ネットワークアクセスがある間に(通常はデプロイイメージを準備する際に)、corepack packコマンドを呼び出します。これにより、ネットワークアクセスがない場合でも、必要なパッケージマネージャーが利用可能になります。

packコマンドには、さまざまなフラグがあります。詳細については、詳細なCorepackドキュメントを参照してください。

サポートされているパッケージマネージャー#

次のバイナリはCorepackを介して提供されます。

パッケージマネージャーバイナリ名
Yarnyarn, yarnpkg
pnpmpnpm, pnpx

よくある質問#

Corepackはnpmとどのように連携しますか?#

Corepackは他のパッケージマネージャーと同様にnpmをサポートできますが、そのシムはデフォルトでは有効になっていません。これにはいくつかの結果があります。

  • Corepackはインターセプトできないため、別のパッケージマネージャーで使用するように構成されたプロジェクト内でnpmコマンドを実行することは常に可能です。

  • "packageManager"プロパティではnpmは有効なオプションですが、シムがないため、グローバルnpmが使用されます。

npm install -g yarnが機能しない#

npmは、グローバルインストールを実行する際に、誤ってCorepackバイナリを上書きすることを防ぎます。この問題を回避するには、次のいずれかのオプションを検討してください。

  • このコマンドを実行しないでください。Corepackはとにかくパッケージマネージャーのバイナリを提供し、要求されたバージョンが常に利用可能であることを保証するため、パッケージマネージャーを明示的にインストールする必要はありません。

  • npm install--forceフラグを追加します。これにより、npmにバイナリを上書きしても問題ないことを伝えられますが、その過程でCorepackのバイナリは消去されます。(それらを元に戻すにはcorepack enableを実行してください。)