npm と npx の違い
Prismaなどのnodeに関するコマンドを実行するときに
`npm prisma migrate dev` ではなく `npx prisma migrate dev` を使うことが多いですが、「npm と npx の違いってなに?」と迷うことがあります。
npm とは?
npm は Node.jsのパッケージマネージャー です。
役割は大きく分けて以下の通りです。
パッケージの管理
npm install lodash→ node_modules に lodash が追加される
・package.json に記録されたスクリプトの実行
npm run dev→ scripts.dev に書かれたコマンドを実行する
つまり、npm は 「依存関係の管理とスクリプトの実行」 がメインの役割です。
npx とは?
npx は npmパッケージを簡単に実行するためのコマンド です。
具体的には:
・ローカルにインストールされたパッケージを実行
npx prisma generate→ node_modules/.bin/prisma を探して実行
・インストールしていないパッケージを一時的に実行
npx cowsay "Hello"→ cowsay を一時的にインストールして実行(キャッシュに保存される)
つまり、npx は 「必要なときにパッケージを実行するランチャー」 というイメージです。
Prismaで npx を使う理由
Prisma CLI (prisma) はプロジェクトごとにバージョンを固定して使うのが一般的です。
もし npm install prisma --save-dev でインストールしていれば、
node_modules/.bin/prisma に CLI が置かれます。
これを直接呼び出すのが npx prisma です。
npx prisma migrate dev→ プロジェクトローカルの Prisma CLI を実行
(グローバルのPrismaとは干渉しない)
まとめ
・npm = パッケージを管理するコマンド
・npx = パッケージを実行するコマンド
・Prisma では npx prisma を使うことで
└ プロジェクトローカルの Prisma CLI を呼び出せる
└ グローバル環境に依存せず安全に使える
💡 補足
最近の Node.js (v16以降) では、npm exec が npx とほぼ同じ動きをします。
そのため将来的には npx prisma ではなく以下のように書くケースも増えていくと思います。
npm exec prisma migrate devいいなと思ったら応援しよう!
よろしければ応援お願いします!
いただいたチップはクリエイターとしての活動費や音楽活動(主に地域の学生への教育)に使わせていただきます!