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
- デフォルト: ['*eslint*', '*prettier*']
- タイプ: 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 に追記することもできます。 依存のディレクトリをひとつ上にすることで、スタックトレース上での表示がすっきりします。
注意: 仮想ストアは複数のプロジェクト間で共有することはできません。 すべてのプロジェクトはそれぞれ固有の仮想ストアを持つ必要があります。 (ルートが共通のワークスペース内のプロジェクトは除く)
virtual-store-dir-max-length
Added in: v9.1.0
- Default: 120
- Types: number
Sets the maximum allowed length of directory names inside the virtual store directory (node_modules/.pnpm). You may set this to a lower number if you encounter long path issues on Windows.
package-import-method
- デフォルト: auto
- タイプ: auto, hardlink, copy, clone, clone-or-copy
Controls the way packages are imported from the store (if you want to disable symlinks inside node_modules, then you need to change the node-linker setting, not this one).
- auto - ストアからパッケージをクローンしようとします。 クローンがサポートされていない場合、ストアからパッケージをハードリンクします。 クローンもリンクもできない場合は、コピーします。
- hardlink - ストアからパッケージをハードリンクします。
- clone-or-copy - ストアからパッケージをクローンしようとします。 クローンがサポートされていない場合、コピーにフォールバックします。
- copy - ストアからパッケージをコピーします。
- clone - ストアからパッケージをクローンします。 (別名: copy-on-write、 参照リンク)
クローンはパッケージを node_modules に書き込む最良の方法です。 最速かつ最も安全です。 クローンを使用している場合、node_modules 内のファイルを編集可能です(編集しても中央ストア側のファイルは変更されません)。
残念ながら、すべてのファイル システムがクローン作成をサポートしているわけではありません。 pnpmで最高の経験をするためには、コピーオンライト (CoW) ファイルシステム (例えばLinuxでは Ext4 の代わりに Btrfs) を使用することをお勧めします。
modules-cache-max-age
- デフォルト: 10080 (単位は分、7 日)
- タイプ: number
孤立したパッケージを node_module ディレクトリから削除するまでの時間を分単位で指定します。 pnpm はパッケージのキャッシュを node_module ディレクトリに保持します。 これにより、ブランチを切り替えたり、依存のダウングレードを行う際のインストールのスピードを速くします。
dlx-cache-max-age
- Default: 1440 (1 day in minutes)
- タイプ: number
The time in minutes after which dlx cache expires. After executing a dlx command, pnpm keeps a cache that omits the installation step for subsequent calls to the same dlx command.
Store Settings
store-dir
- デフォルト:
- $PNPM_HOME 環境変数が設定されている場合、 $PNPM_HOME/store
- $XDG_DATA_HOME 環境変数が設定されている場合、 $XDG_DATA_HOME/pnpm/store
- Windowsの場合: ~/AppData/Local/pnpm/store
- macOSの場合: ~/Library/pnpm/store
- Linuxの場合: ~/.local/share/pnpm/store
- タイプ: path
パッケージをディスク上のどこに保存するか指定します。
ストアはインストールを行うのと同じディスク状にある必要があります。つまり、ディスクごとに一つのストアを持つことになります。 現在のディスクにホームディレクトリがある場合は、その中にストアが作成されます。 ディスク上にホームディレクトリがない場合は、ストアはファイルシステムのルートに作られます。 例えば、/mnt にマウントされたファイルシステム上でインストールを行なった場合、ストアは /mnt/.pnpm-store に作られます。 Windows システムでも同様です。
異なるディスク上のストアを指定することも可能ですが、その場合 pnpm はハードリンクをせずにパッケージをコピーします。これは、ハードリンクは同一のファイルシステム上でのみ使用可能なためです。
verify-store-integrity
- デフォルト: true
- タイプ: Boolean
By default, if a file in the store has been modified, the content of this file is checked before linking it to a project's node_modules. If verify-store-integrity is set to false, files in the content-addressable store will not be checked during installation.
use-running-store-server
Deprecated feature
- デフォルト: false
- タイプ: Boolean
Only allows installation with a store server. If no store server is running, installation will fail.
strict-store-pkg-content-check
Added in: v9.4.0
- デフォルト: true
- タイプ: Boolean
Some registries allow the exact same content to be published under different package names and/or versions. This breaks the validity checks of packages in the store. To avoid errors when verifying the names and versions of such packages in the store, you may set the strict-store-pkg-content-check setting to false.
ロックファイル設定
lockfile
- デフォルト: true
- タイプ: Boolean
false に設定すると、pnpm は pnpm-lock.yaml を読み込んだり、書き込んだりしません。
prefer-frozen-lockfile
- デフォルト: true
- タイプ: Boolean
true に設定すると、pnpm-lock.yaml が存在して、 package.json の依存指定の条件を満たす場合に、ヘッドレスインストールを行います。 ヘッドレスインストールでは、lockfile を変更する必要がないため、すべての依存関係の解決がスキップされます。
lockfile-include-tarball-url
- デフォルト: false
- タイプ: Boolean
pnpm-lock.yamlのすべてのエントリに、パッケージの tarball への完全な URL を追加します。
git-branch-lockfile
- デフォルト: false
- タイプ: Boolean
When set to true, the generated lockfile name after installation will be named based on the current branch name to completely avoid merge conflicts. For example, if the current branch name is feature-foo, the corresponding lockfile name will be pnpm-lock.feature-foo.yaml instead of pnpm-lock.yaml. It is typically used in conjunction with the command line argument --merge-git-branch-lockfiles or by setting merge-git-branch-lockfiles-branch-pattern in the .npmrc file.