Skip to content

Corepack

追加: v16.9.0, v14.19.0

[安定版: 1 - 実験的]

安定版: 1 安定版: 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を更新して、選択したパッケージマネージャを使用するように要求できます。

bash
corepack use  # package.jsonに最新の7.xバージョンを設定します
corepack use yarn@* # package.jsonに最新バージョンを設定します

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

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

bash
corepack install --global

または、タグまたは範囲を使用できます。

bash
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 コマンドを実行することは常に可能です。
  • npm"packageManager" プロパティの有効なオプションですが、シムがないため、グローバル npm が使用されます。

npm install -g yarn が動作しない

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

  • このコマンドを実行しないでください。Corepack はいずれにせよパッケージマネージャーのバイナリを提供し、要求されたバージョンが常に利用可能であることを保証するため、パッケージマネージャーを明示的にインストールする必要はありません。
  • npm install--force フラグを追加します。これにより、npm はバイナリを上書きしても問題ないことを通知しますが、その過程で Corepack のバイナリを消去します。(それらを元に戻すには、corepack enable を実行してください。)