よくpnpm exec
とpnpm dlx
のどっちがどっちなのか分からなくなるのでまとめる。
pnpm exec
プロジェクト内でnode_modules/.bin
に置かれたコマンドの実行や、スクリプトの実行を行うコマンド。
# node_modules/.bin/vitestを実行
pnpm exec vitest
# websiteワークスペース内でlsを実行
pnpm -F website exec ls
既存の名前と衝突しなければ、exec
は省略できる。
# node_modules/.bin/vitestを実行
pnpm vitest
# インストールされたパッケージ一覧が表示される(pnpm exec lsではない)
pnpm ls
pnpm dlx
プロジェクト内の依存関係に関係なく、パッケージをレジストリから取得してデフォルトのコマンドを実行するコマンド。
# storybookの初期化
pnpm dlx storybook@latest init
pnpx
はpnpm dlx
のエイリアスとして使える
pnpx storybook@latest init
特定のワークスペースで実行したい場合は、--filter
や-F
で指定するのではなく--package
を利用する。
pnpm --package=website dlx storybook@latest upgrade
判別する
pnpmとYarn、npmの比較表でpnpm dlx
はnpx
と同列にされていることから、npx
と同じように末尾がx
で終わるコマンドは、外部パッケージを利用するみたいに覚えると良さそうに感じた。
npx
とpnpm dlx
は「パッケージの直接実行」として同列に挙げられているので、npx
はローカルに対象のパッケージがあればそれを参照してコマンドを実行する。
同様にnpm exec
もpnpm exec
とは動作が異なるので注意すること。