メインコンテンツにスキップ
バージョン: 9.x

.pnpmfile.cjs

pnpmでは、特別な関数(フック)を介してインストールプロセスに直接介入できます。フックは、.pnpmfile.cjsというファイルで宣言できます。

デフォルトでは、.pnpmfile.cjsはロックファイルと同じディレクトリに配置する必要があります。たとえば、共有ロックファイルを持つワークスペースでは、.pnpmfile.cjsはモノレポのルートに配置する必要があります。

フック

TL;DR

フック関数プロセス用途
hooks.readPackage(pkg, context): pkgpnpmが依存関係のパッケージマニフェストを解析した後に呼び出されます依存関係のpackage.jsonを変更できます
hooks.afterAllResolved(lockfile, context): lockfile依存関係が解決された後に呼び出されます。ロックファイルを変更できます。

hooks.readPackage(pkg, context): pkg | Promise<pkg>

解析後、解決前に、依存関係のpackage.jsonを変更できます。これらの変更はファイルシステムに保存されませんが、ロックファイルで解決される内容、ひいてはインストールされる内容に影響します。

変更したい依存関係がすでに解決されている場合は、pnpm-lock.yamlを削除する必要があることに注意してください。

ヒント

package.jsonへの変更をファイルシステムに保存する必要がある場合は、pnpm patchコマンドを使用して、package.jsonファイルにパッチを適用する必要があります。これは、たとえば依存関係のbinフィールドを削除する場合に役立ちます。

引数

  • pkg - パッケージのマニフェスト。レジストリからのレスポンスまたはpackage.jsonの内容です。
  • context - ステップのコンテキストオブジェクト。メソッド#log(msg)を使用すると、ステップのデバッグログを使用できます。

使用方法

.pnpmfile.cjsの例(依存関係の依存関係を変更します)

function readPackage(pkg, context) {
// Override the manifest of foo@1.x after downloading it from the registry
if (pkg.name === 'foo' && pkg.version.startsWith('1.')) {
// Replace bar@x.x.x with bar@2.0.0
pkg.dependencies = {
...pkg.dependencies,
bar: '^2.0.0'
}
context.log('bar@1 => bar@2 in dependencies of foo')
}

// This will change any packages using baz@x.x.x to use baz@1.2.3
if (pkg.dependencies.baz) {
pkg.dependencies.baz = '1.2.3';
}

return pkg
}

module.exports = {
hooks: {
readPackage
}
}

既知の制限事項

readPackage を介して依存関係のマニフェストから scripts フィールドを削除しても、pnpm が依存関係をビルドするのを防ぐことはできません。依存関係をビルドするとき、pnpm はパッケージのアーカイブからパッケージの package.json を読み取りますが、これはフックの影響を受けません。パッケージのビルドを無視するには、pnpm.neverBuiltDependencies フィールドを使用します。

hooks.afterAllResolved(lockfile, context): lockfile | Promise<lockfile>

ロックファイルの出力をシリアル化前に変更できます。

引数

  • lockfile - pnpm-lock.yamlにシリアル化されるロックファイルの解決オブジェクト。
  • context - ステップのコンテキストオブジェクト。メソッド#log(msg)を使用すると、ステップのデバッグログを使用できます。

使用例

.pnpmfile.cjs
function afterAllResolved(lockfile, context) {
// ...
return lockfile
}

module.exports = {
hooks: {
afterAllResolved
}
}

既知の制限事項

制限はありません。ロックファイルでできることはすべてこの関数で変更でき、ロックファイルの機能を拡張することさえできます。

ignore-pnpmfile

  • デフォルト: false
  • タイプ: ブール値

.pnpmfile.cjsは無視されます。インストール中にスクリプトが実行されないようにするために、--ignore-scriptsと一緒に使用すると便利です。

pnpmfile

  • デフォルト: .pnpmfile.cjs
  • タイプ: パス
  • 例: .pnpm/.pnpmfile.cjs

ローカルpnpmfileの場所。

global-pnpmfile

  • デフォルト: null
  • タイプ: パス
  • 例: ~/.pnpm/global_pnpmfile.cjs

グローバルpnpmfileの場所。グローバルpnpmfileは、インストール中にすべてのプロジェクトで使用されます。

注記

ローカルpnpmfileを使用することをお勧めします。pnpmをプライマリパッケージマネージャーとして使用しないプロジェクトでpnpmを使用する場合にのみ、グローバルpnpmfileを使用してください。