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の方が短くて良い。