Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
46
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@tatakahashiap

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

npxについて

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

特徴

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

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

シンプルに実行できる

モジュールを実行しようとすると、以下のような形になりますが、

$ ./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にタスクを定義する方が無難なのかな、と思いますが、便利だしメリットも大きいのでもう少し使い所を考えたいところです。

46
Help us understand the problem. What is going on with this article?
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
46
Help us understand the problem. What is going on with this article?