pnpm は何をしますか?
厳格な依存関係解決を行うNode.jsパッケージマネージャー。pnpm固有のコマンド実行、ワークスペース設定、カタログ・パッチ・オーバーライドによる依存関係管理に使用します。
特徴
- 高速: 並列インストールとキャッシュにより、パッケージのインストールが高速です。
- ディスク効率: すべてのパッケージをグローバルストアに保存し、プロジェクト間でハードリンクすることでディスク容量を節約します。
- 厳格な依存関係:
node_modulesの構造を厳密に管理し、依存関係の重複や衝突を防止します。 - ワークスペース対応:
pnpm-workspace.yamlを使ってmonorepo構成を簡単に管理できます。
インストール
npm install -g pnpm
または、corepackを使用する場合:
corepack enable
corepack prepare pnpm@latest --activate
基本的な使い方
パッケージのインストール
pnpm add <package-name>
pnpm add -D <dev-dependency>
pnpm add --global <global-package>
スクリプトの実行
pnpm run <script-name>
pnpm test
pnpm build
依存関係の更新
pnpm update
pnpm update <package-name>
ワークスペース (monorepo)
pnpm-workspace.yaml ファイルでワークスペースを定義します:
packages:
- 'packages/*'
- 'apps/*'
ワークスペース内のパッケージに対してコマンドを実行するには:
pnpm --filter <package-name> run build
pnpm --filter "./packages/**" test
設定
プロジェクトの.npmrcファイルでpnpmの動作をカスタマイズできます:
# インストール時にダウンロードの進捗を表示しない
loglevel=warn
# 自動でlockfileを更新しない
lockfile=false
# 指定したパッケージの更新を許可しない
frozen-lockfile=true
カタログ
依存関係のバージョンを一元管理するために、pnpm-workspace.yaml内でcatalogsセクションを使用できます:
catalogs:
default:
react: ^18.2.0
typescript: ^5.0.0
パッチ
依存関係にパッチを適用するには、patchesディレクトリにパッチファイルを配置し、package.jsonのpnpm.patchedDependenciesフィールドに追加します:
{
"pnpm": {
"patchedDependencies": {
"[email protected]": "patches/[email protected]"
}
}
}
オーバーライド
依存関係のバージョンを強制的に変更するには、package.jsonのpnpm.overridesフィールドを使用します:
{
"pnpm": {
"overrides": {
"lodash": "^4.17.21",
"react": { ".": "^18.2.0" }
}
}
}