見出し画像

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

#npm #npx #node .js

いいなと思ったら応援しよう!

web_dev_sax よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費や音楽活動(主に地域の学生への教育)に使わせていただきます!