編集

pnpm v10

pnpm v10 がリリースされた。

https://github.com/pnpm/pnpm/releases/tag/v10.0.0

#Lifecycle scripts のデフォルト無効化

pnpm v10 では、lifecycle scripts の実行をデフォルトで無効化する変更が入った。

この変更は、セキュリティ強化を目的としている。Lifecycle scripts とは、packages.json の scripts に特定の命名パターンで記述されるpreparepostinstallなどのスクリプトであり、特定の script やイベントにフックして自動的に実行されるもので、これを悪用するとユーザーの意図しないコードを実行することが出来る。

特定の依存関係の lifecycle scripts を実行するには、次のようにホワイトリスト形式で設定する必要がある。

json
{
  "pnpm": {
    "onlyBuiltDependencies": ["fsevents"]
  }
}

#packageManager による自己バージョン管理

次のように package.json のpackageManegerフィールドに利用したい pnpm のバージョンを指定することで pnpm のバージョンを自動で管理する機能がデフォルトで有効化された。

json
{
  "engines": {
    "node": "^20.0.0"
  },
  "packageManager": "pnpm@9.7.0"
}

この変更により pnpm では、この機能のフラグであったmanage-package-manager-versionsを有効化する必要も、packageManagerを元々利用していた Corepack を有効化することもなく、自動でバージョンを切り替えることが可能になった。

#依存関係の検証または自動インストール

verify-deps-before-runフラグを有効化することで、依存関係の検証を行うことが出来る。

次のように.npmrcへ記述することで、有効化することが出来る。

shell
verify-deps-before-run=install

ロックファイルとnode_modulesが一致しない場合に、自動的にpnpm installを実行したい場合はinstall、警告を出したい場合はwarn、エラーを出したい場合はerror、実行の確認を求める場合はpromptを指定する。

編集