Node.jsのパッケージマネージャであるnpmにはnpm
コマンドのほかにnpx
というコマンドがついてきます。npx
は便利さのわりにあまり活用されていない気がしたので書いた記事。
npx
コマンドとは?🤔
npx
はnpmのパッケージで定義されたコマンドを起動するコマンドです。npmのパッケージではpackage.json
のbin
を設定することでそのパッケージをインストールしたときに同時にインストールするコマンドを定義することができます。npx
ではパッケージ名を指定することでそのパッケージで定義されたコマンドを実行できます。
利点1 - ローカルインストールしたパッケージのコマンドの起動が楽😀
npmで配布されているCLIアプリを使うとき、npm install
に-g
フラグを付けてグローバルにインストールしろ、という指示になっていることが多いです。
$ npm install -g npm-check-updates
これによりコマンドがシステム全体にインストールされるので、パッケージのコマンドがどこからでもそのまま実行できます。
$ ncu
しかし、システムにインストールするnpm install -g
には通常sudo
が必要ですし、システムに変更を加えるのは避けたいです。
だからといってローカルにインストールすると下記のように起動が面倒であるという欠点があります。
$ npm install npm-check-updates # ローカルにインストール
$ ./node_modules/.bin/ncu # 起動
そんなときにnpx
を使うと以下のようにローカルにインストールしたコマンドを簡潔に起動できます。
$ npx ncu # 起動
単純にパッケージがインストールしたコマンド名の前にnpx
をつけるだけです。
利点2 - そもそもインストールしなくて良い😲
前セクションでnpx
を使ってローカルインストールしたパッケージのコマンドを起動する方法を紹介しましたが、実はnpx
ではそもそもパッケージをインストールする必要自体ありません。なぜならインストールされていないパッケージは自動で一時フォルダにインストールして実行するという機能があるからです。
例えば
$ npx npm-check-updates
以上だけでnpm-check-updates
パッケージをダウンロードし、一時フォルダに展開し、定義されているコマンドを実行するということを行ってくれます。
他にも静的なウェブサーバのパッケージであるserve
であれば
$ npx serve -p 8080
これだけでウェブサーバを起動できます。引数もそのまま渡せます。超便利!