Settings (.npmrc)
pnpm は、コマンド行、環境変数、および .npmrc ファイルから設定を取得します。
pnpm config コマンドを使用して、ユーザーおよびグローバルの .npmrc ファイルの内容を更新および編集することができます。
関連する4つのファイルは次のとおりです。
- プロジェクトごとの設定ファイル(
/path/to/my/project/.npmrc) - ワークスペースごとの設定ファイル (
pnpm-workspace.yamlファイルが含まれているディレクトリー) - ユーザーごとの設定ファイル(
~/.npmrc) - グローバルな設定ファイル (
/etc/npmrc)
.npmrc ファイルはすべて key = value という INI形式 のパラメータのリストです。
.npmrc ファイルの値には、 ${NAME} 構文を使用して環境変数を含めることができます。 また、 環境変数はデフォルト値と共に指定することもできます。 ${NAME-fallback} は、 NAME が設定されていない場合、fallback を返します。 ${NAME:-fallback} はNAMEが設定されていないか空文字の場合に、fallbackを返します。
依存の巻き上げ設定
hoist
- デフォルト: true
- タイプ: boolean
trueの場合、すべての依存関係は node_modules/.pnpm/node_modules に巻き上げられます。 これにより、リストされていない依存に、 node_modules 内のすべてのパッケージからアクセスできるようになります。
hoist-workspace-packages
- デフォルト: true
- タイプ: boolean
When true, packages from the workspaces are symlinked to either <workspace_root>/node_modules/.pnpm/node_modules or to <workspace_root>/node_modules depending on other hoisting settings (hoist-pattern and public-hoist-pattern).
hoist-pattern
- デフォルト: ['*']
- タイプ: string[]
どのパッケージを node_modules/.pnpm/node_modules に巻き上げるかを指定します。 デフォルトでは、全てのパッケージが巻き上げられます。しかし、phantom dependency を持つ、扱いに困るパッケージの存在が分かっている場合には、このオプションにより、それらを除外して巻き上げることができます (推奨)。
例:
hoist-pattern[]=*eslint*
hoist-pattern[]=*babel*
! を使用して巻き上げから除外するパターンを指定することもできます。
例:
hoist-pattern[]=*types*
hoist-pattern[]=!@types/react
public-hoist-pattern
- Default: []
- タイプ: string[]
hoist-pattern が仮想ストア内の隠しモジュールディレクトリに依存を巻き上げるのに対し、public-hoist-pattern はパターンにマッチする依存をルートのモジュールディレクトリへと巻き上げます。 ルートのモジュールディレクトリへの巻き上げによって、アプリケーションのコードは phantom dependencies へアクセスできるようになります。たとえ依存関係の解決方法が不適切に変更されたとしてもアクセス可能です。
この設定は、依存関係を適切に解決していなくて扱いに困る、プラ グイン可能なツールを利用する場合に便利です。
例:
public-hoist-pattern[]=*plugin*
注意: shamefully-hoist を true に設定するのと public-hoist-pattern を * に設定するのは同じ効果があります。
! を使用して巻き上げから除外するパターンを指定することもできます。
例:
public-hoist-pattern[]=*types*
public-hoist-pattern[]=!@types/react
shamefully-hoist
- デフォルト: false
- タイプ: Boolean
デフォルトでは、pnpm はそれなりに厳格な node_modules を作成します。依存パッケージは定義されていない依存パッケージへアクセスできますが、node_modules の外からはアクセスできません。 エコシステム内のほとんどのパッケージは、この方法で問題なく動作します。 しかし、ルートの node_modules に依存パッケージが巻き上げられていないと動作しないツールがある場合には、この設定を true にすることで巻き上げることができます。
node_modules に関する設定
modules-dir
- デフォルト: node_modules
- タイプ: path
(node_modules の代わりに) 依存パッケージをインストールする場所を指定します。
node-linker
- デフォルト: isolated
- タイプ: isolated, hoisted, pnp
Node.js のパッケージをインストールするのに使用するリンカーを指定します。
- isolated - 依存関係は
node_modules/.pnpmの仮想ストアからシンボリックリンクでインストールされます。 - hoisted - シンボリックリンクは作成されず、フラットな
node_modulesが作成されます。 npm や Yarn Classic によって作成されるnode_modulesと同じです。 この設定を使用すると、Yarnのライブラリーの 1 つが巻き上げに使用されます。 この設定を使用する合理的な理由は以下のとおりです:- 使っているツールはシンボリックリンクではうまく機能しない。 React Native のプロジェクトは、おそらく、巻き上げられた(hoisted)
node_modulesを使用する場合にのみ機能します。 - プロジェクトがサーバーレスホスティングにデプロイされる。 一部のサーバーレスサービスの提供者 (AWS Lambdaなど) はシンボリックリンクをサポートしていません。 この問題を解決する代替策は、デプロイ前にアプリケーションをバンドルすることです 。
"bundledDependencies"としてパッケージを公開したい場合- --preserve-symlinks フラグを指定して Node.js を実行している場合。
- 使っているツールはシンボリックリンクではうまく機能しない。 React Native のプロジェクトは、おそらく、巻き上げられた(hoisted)
- pnp -
node_modulesなし。 Plug'n'Play は Yarn で使用されている Node のための革新的な方式です。pnpをリンカーとして使う場合には、symlinkをfalseに設定することが推奨されます。
symlink
- デフォルト: true
- タイプ: Boolean
symlink を false に設定すると、pnpm は仮想ストアのディレクトリをシンボリックリンクを用いずに構成します。 この設定は node-linker=pnp と組み合わせる際に役立ちます。
enable-modules-dir
- デフォルト: true
- タイプ: Boolean
false を設定すると、pnpm はモジュールディレクトリ (node_modules) にファイルを一切書き込みません。 この設定はユーザスペース上のファイルシステム (FUSE) にモジュールディレクトリがマウントされている場合に有用です。 node_module ディレクトリを FUSE でマウントするのに使える実験的な CLIツールがあります: @pnpm/mount-modules
virtual-store-dir
- デフォルト: node_modules/.pnpm
- タイプ: path
ストアにリンクするディレクトリを指定する。 すべてのプロジェクトの直接および間接的な依存はこのディレクトリへリンクされる。
Windows 上でのパスの長さ上限に関する問題を解決するのに役立ちます。 何らかの非常に長いパスを持つ依存がある場合、ドライブ上のルートに仮想ストアを置くことが可能です。 (例: C:\my-project-store)
もしくは、仮想ストアを .pnpm にして .gitignore に追記することもできます。 依存のディレクトリをひとつ上にすることで、スタックトレース上での表示がすっきりします。
注意: 仮想ストアは複数のプロジェクト間で共有することはできません。 すべてのプロジェクトはそれぞれ固有の仮想ストアを持つ必要があります。 (ルートが共通のワークスペース内のプロジェクトは除く)