npx
は、リモートでホストされるNode.jsのCLIツールや実行ファイルを実行できるツールである。名称はNode Package eXecutorの略に由来する。まんまだ。
何ができるか
npx
は、主に以下の2つのことを行う。
- ローカルのNode.jsのCLIツールや実行ファイルをパス指定なしで実行。
- リモートでホストされるNode.jsのCLIツールや実行ファイルを一時的にインストール&実行。
実行する際は、npx コマンド名 or パッケージ名
のようにコマンドを打つ。
該当のパッケージがローカルのnode_modules
に存在すれば、それが実行される。なければ、npm
レジストリ(https://registry.npmjs.org/)にリクエストを投げ、ホストされていればインストール&実行の後に削除する。
レジストリに存在しないパッケージであれば、404エラーをコンソールに表示する。
なお、npm
レジストリに限らず、アクセスできるリモートのパッケージであればURLを指定して実行できる。
便利なポイント
npx
を利用するメリットは、環境を汚さずに任意のコードを実行できる点にある。例えばReactの基本的な環境構築を行ってくれるnpx create-react-app my-app
などが良い例だ。
また、ローカルインストールしたパッケージを実行する際にパスを省略できるのもメリットである。
npmとnpxの違い
npm
(Node Package Manager)が担うのはパッケージの管理、npx
が担うのはCLIツールや実行ファイルの実行、という点で違う。「実行ファイルの実行」ってなんか気持ちの悪い表現だが、なんて言えばいいのかわからないので妥協する
npx
は、かつては独立したNode.jsパッケージだった。それがnpm
のv5.2.0で本体に取り込まれた。いまは、npm
をインストールすると自動でnpx
もついてくる。
使い方
npx
の使い方は、npm
と同じく超簡単である。npx
の後ろに実行したいパッケージをただ指定すれば良い。
また、以下のような形で、パッケージのバージョンや実行コマンド、引数(オプション)を指定できる(v10.5.2の例)。
なお、この指定方法はnpm exec
のものと共通している。
npm execとの違い
npm exec
は、npx
の代替である。明記されてはいないが、npm exec
のv7.24.2の概要にはnpm exec
コマンドとnpx
コマンドが併記されている。
ドキュメントには、npx
のページもnpm exec
のページもある。ただ、npm exec
の方が新しく、ドキュメントも手厚く、おまけにnpx
の引数パーサーやインストールプロセスにはnpm exec
が使われているようである。
npx
は、npm exec
のショートハンドみたいなもの……なの? よくわからないが、個人的には、npm exec
よりもnpx
の方が短くて良い。