Help us understand the problem. What is going on with this article?

npxでnodeモジュールを実行する

More than 1 year has passed since last update.

npxについて

バージョン5.2.0以上のnpmにはnpxというツールがバンドルされています。
npxを使うとローカルにインストールしたnpmのバイナリをお手軽に実行できます。

特徴

個人的に良いと思った点は主に以下の三点ですかね。

  • シンプルに実行できる
  • ローカルに存在しないパッケージでも実行可能
  • nodeのバージョンを指定してnpm-scriptを実行できる

シンプルに実行できる

npmでバイナリを実行しようとすると、以下のような形になりますが、

$ ./node_modules/.bin/パッケージ名 // パスを指定してバイナリを叩く
$ $(npm bin)/パッケージ名
$ npm run タスク名 // package.json内のnpm-scriptsで定義したタスク

npxだと以下でOK。

$ npx パッケージ名

ローカルパッケージを、パスを気にしたり npm-scripts でタスクを定義しなくても実行できるのはいいですね。

ローカルに存在しないパッケージでも実行可能

もし指定したパッケージがローカルに存在しない場合は、一旦グローバルにインストールされ一度だけ実行できるという機能があります。処理が完了したらそのパッケージはグローバルから削除されるので汚染の心配もありません。
試しにcoswayというコマンドライン上で指定した文字列を牛に喋らせるというパッケージを実行してみます。

$ npx cowsay hoge
npx: installed 10 in 2.796s // インストールにかかった時間
 ______
< hoge >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |

終了後、npmでcowsayを実行すると削除されているのがわかります。

$ $(npm bin)/cowsay
-bash: 〜/node_modules/.bin/cowsay: No such file or directory

また、github上のリポジトリを実行することも可能です。バグフィックス済みだけど、npmに公開はされていないみたいなこともままあるみたいので、そういう時には有効かもしれません。

$ npx githhub:ユーザー名/リポジトリ名 

nodeのバージョンを指定してnpm-scriptsを実行できる

書いて字のごとく、nodeのバージョンを指定してnpm-scriptsを実行できます。
バージョンを上げたいけど、問題が起きないかどうかの検証を簡単に行えるのはいいですね。

$ npx -p node@10.3.0 npm run build

こちらも実行完了後にそのバージョンは削除されます。

最後に

プロジェクトのポータビリティを担保すると、結局ローカルインストールして、npm-scriptsにタスクを定義する方が無難なのかな、と思いますが、便利だしメリットも大きいのでもう少し使い所を考えたいところです。

tatakahashiap
フロントエンドエンジニアを自称しています。 ツイッター: @unkkn2
https://neighbors.cc/@ttakahashi
ap-com
エーピーコミュニケーションズは「エンジニアから時間を奪うものをなくす」ため、ITインフラ自動化のプロフェッショナルとして、クラウドも含めたインフラ自動化技術で顧客の課題を解決すると同時に、SI業務の課題を解決するプロダクト・サービスを提供するNeoSIer(ネオエスアイヤー)です。
https://www.ap-com.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした