npxとnpmの違いは?


517

私はReactの学習を始めたばかりで、Facebookは次の既製のプロジェクトを提供することで、初期設定を簡素化するのに役立ちます。

スケルトンプロジェクトをインストールする必要がある場合はnpx create-react-app my-app、コマンドラインで入力する必要があります。

Githubの中にFacebookが持っていない理由私は思っていたnpx create-react-app my-appのではなくnpm create-react-app my-app


23
create-react-appジェネレーターです。npx行くインターネット、それはそれ(実行できるように、一時的にパッケージをダウンロードし、NPのX)。取得(および必要)するのは、コマンドを実行したローカルに保存された出力です。
vsync 2018

回答:


644

npxの紹介:npmパッケージランナー

NPM- パッケージを管理しますが、実行を容易にしません。-Nodeパッケージ
NPX実行するためのツール。

NPXNPMバージョンにバンドルされています5.2+

NPMそれ自体は単にパッケージを実行するだけではありません。実際にはパッケージを実行しません。NPMを使用してパッケージを実行する場合は、package.jsonファイルにそのパッケージを指定する必要があります。

実行可能ファイルがNPMパッケージを介してインストールされると、NPMはそれらにリンクします。

  1. ローカルインストールでは、./node_modules/.bin/ディレクトリに「リンク」が作成されます。
  2. グローバルインストールには、LinuxまたはWindows のグローバルbin/ディレクトリ(など/usr/local/bin)から作成された「リンク」%AppData%/npmがあります。

読むべきドキュメント


NPM:

特定のプロジェクトにローカルにパッケージをインストールするかもしれません:

npm install some-package

ここで、NodeJSがそのパッケージをコマンドラインから実行するようにするとします。

$ some-package

上記は失敗します。唯一のグローバルにインストールパッケージには、自分の名前を入力して実行することができるだけ

これを修正して実行するには、ローカルパスを入力する必要があります。

$ ./node_modules/.bin/some-package

ローカルにインストールされたパッケージを技術的に実行するには、packages.jsonファイルを編集し、scriptsセクションにそのパッケージを追加します。

{
  "name": "whatever",
  "version": "1.0.0",
  "scripts": {
    "some-package": "some-package"
  }
}

次に、npm run-script(またはnpm run)を使用してスクリプトを実行します。

npm run some-package

NPX:

npxが、またはローカルプロジェクトバイナリに<command>存在するかどうかを確認し$PATH、実行します。したがって、上記の例で、ローカルにインストールされたパッケージを実行する場合は、次のようにsome-package入力するだけです。

npx some-package

のもう1つの大きな利点npxは、以前にインストールされていなかったパッケージを実行できることです。

$ npx create-react-app my-app

上記の例では、コマンドが実行されたパス内にreactアプリのボイラープレートが生成され、使用するたびにアップグレードする必要なく、ジェネレーターまたはビルドツールの最新バージョンを常に使用できるようになります。


関連する質問:

  1. node_modulesにローカルにインストールされたパッケージを使用する方法?
  2. NPM:./node_modules/.binフォルダーをソースする方法?
  3. npmスクリプトを使用してjsファイルをどのように実行しますか?

2
だから反応しないnode.jsでくださいね?'npm'(ノードパッケージマネージャー)から利用できるのはなぜですか?
winklerrr

3
数年前、フロントエンドのパッケージ管理用のBowerがありましたが、その使用は劇的にnpmに有利になりました。いくつかの理由の中で、JavaScriptに関連するすべてに単一のパッケージマネージャーを使用するだけでよく、フロントエンドプロジェクトの開発にもcommonjs解像度を使用できます。詳細については、この応答を確認できます。反応に関して:いいえ、それは直接ノードを使用しませんが、ノードでも使用できます!(例:サーバー側のレンダリング)
RecuencoJones

1
@RecuencoJones-OPの代わりに私の回答にコメントした
vsync

1
はい、@ winklerrrについて言及するのを忘れていました。彼のコメントに対応していました
RecuencoJones

1
最も便利な機能は、まだインストールされていないパッケージをNPXでインストールすることです。それ以外の場合は./node_modules/.bin、$ PATHに追加してください。NPXは必要ありません。
ロンE

78

npxはnpmパッケージランナーです(xはおそらくeXecuteを表します)。典型的な使用法は、パッケージをダウンロードして、一時的にまたは試用するために実行することです。

create-react-appはnpmパッケージであり、プロジェクトのライフサイクルで一度だけ実行されることが期待されています。したがって、npxを使用して、1つのステップでインストールおよび実行することをお勧めします。

マンページhttps://www.npmjs.com/package/npxで述べたように、npxはデフォルトでPATH内またはnode_modules / .binからコマンドを実行できます。

注: 少し調べてみると、create-react-appがノード環境内で実行されるJavascriptファイル(Linuxシステムでは/usr/lib/node_modules/create-react-app/index.jsを指す可能性がある)を指していることがわかります。 。これは単にチェックを行うグローバルツールです。実際の設定は、最新バージョンがプロジェクトにインストールされているreact-scriptsによって行われます。詳細については、https://github.com/facebook/create-react-appを参照してください


2
典型的な用途は、パッケージをダウンロードして実行するのと同じくらい頻繁に、ローカルまたはグローバルに既にインストールされているバージョンを実行することです。

69

NPMはパッケージマネージャーです。NPMを使用してnode.jsパッケージをインストールできます

NPXはnode.jsパッケージを実行するためのツールです。

そのパッケージをグローバルにインストールしたかローカルにインストールしたかは関係ありません。NPXは一時的にインストールして実行します。NPMは、package.jsonファイルを構成してスクリプトセクションに含めると、パッケージを実行することもできます。

したがって、ローカルまたはグローバルにインストールせずにノードパッケージをすばやくチェック/実行したい場合は、NPXを使用してください。

np M-マネージャー

np X-実行-覚えやすい


ショートと明確には説明
バリスセルカンアキン

私が経験した長いブログよりはるかに良い。
Mohan Gundlapalli

「一時的に」について少し詳しく説明してください。コマンドの実行後にバイナリが破棄され、毎回 npxがバイナリを再ダウンロードすることを強制することを意味しますか?
ジムアホ

49

NPX:

https://www.futurehosting.com/blog/npx-makes-life-easier-for-node-developers-plus-node-vulnerability-news/から:

Web開発者は、開発マシン上に数十のプロジェクトを持つことができ、各プロジェクトには、npmがインストールされた依存関係の固有のセットがあります。数年前、GruntやGulpのようなCLIアプリケーションを扱うための通常のアドバイスは、それらを各プロジェクトにローカルにインストールし、さらにコマンドラインから簡単に実行できるようにグローバルにインストールすることでした。

しかし、グローバルにインストールすると、解決した問題と同じ数の問題が発生しました。プロジェクトは、コマンドラインツールのさまざまなバージョンに依存している場合があり、多くの開発固有のCLIツールでオペレーティングシステムを汚染することも適切ではありません。今日、ほとんどの開発者はツールをローカルにインストールし、そのままにしておくことを好みます。

ツールのローカルバージョンを使用すると、開発者はグローバルにインストールされたバージョンのツールとの非互換性について心配することなく、GitHubからプロジェクトをプルできます。NPMはローカルバージョンをインストールするだけで、問題ありません。しかし、プロジェクト固有のインストールには問題がないわけではありません。プロジェクト内の正確な場所を指定したり、エイリアスをいじったりせずに、正しいバージョンのツールを実行するにはどうすればよいでしょうか。

それがnpxが解決する問題です。NPM 5.2に含まれる新しいツールであるnpxは、プロジェクト内から呼び出されたときに適切なアプリケーションを実行するのに十分スマートな小さなユーティリティです。

たとえば、プロジェクトローカルバージョンのmochaを実行したい場合は、プロジェクト内でnpx mochaを実行すると、期待どおりに動作します。

npxの便利な副次的な利点は、まだインストールされていないnpmパッケージが自動的にインストールされることです。したがって、ツールの作成者であるKatMarchánが指摘するように、地球環境を汚染しているBenny Hillに対処する必要なく、npx benny-hillを実行できます。

npxを試してみたい場合は、npmの最新バージョンに更新してください。


nvm-windowsを使用している場合は、npmでnpxを取得できない可能性がありますが、手動でインストールする必要があります。npm i -g npx
Neil

1
NPM can just install local versions- 正しくありません。npmグローバルにインストールでき、これは一般的な方法です。
vsync 2018

1
NPXの優れた紹介は、KatMarchánによるmedium.com/@maybekatz/…にあります。
Jeff Hu

1
@vsyncこれは「NPMはローカルバージョンを簡単にインストールできるので、問題ありません」と解釈すべきだと思います。制限を意味するのではなく。
YipYip 2018年

37

npx 明示的にインストールせずにパッケージのコマンドを実行します。

ユースケース:

  • パッケージをグローバルにもローカルにもインストールしたくない。
  • グローバルにインストールする権限がありません。
  • いくつかのコマンドをテストしたいだけです。

構文:

npx [options] [-p|--package <package>] <command> [command-arg]...

パッケージはオプションです:

npx   -p uglify-js         uglifyjs --output app.min.js app.js common.js
      +----------------+   +--------------------------------------------+
      package (optional)   command, followed by arguments

例えば:

Start a HTTP Server      : npx http-server
Lint code                : npx eslint ./src
                         # Run uglifyjs command in the package uglify-js
Minify JS                : npx -p uglify-js uglifyjs -o app.min.js app.js common.js
Minify CSS               : npx clean-css-cli -o style.min.css css/bootstrap.css style.css
Minify HTML              : npx html-minifier index-2.html -o index.html --remove-comments --collapse-whitespace
Scan for open ports      : npx evilscan 192.168.1.10 --port=10-9999
Cast video to Chromecast : npx castnow http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4

詳細command



7

NPXの動作例を次に示します。npx cowsay hello

これをbashターミナルに入力すると、結果が表示されます。これの利点は、npxが一時的に牛追いをインストールしたことです。牛追いは恒久的に設置されていないため、パッケージの汚染はありません。これは、パッケージの汚染を避けたい1回限りのパッケージに最適です。

他の回答で述べたように、npxは、(npmで)パッケージをインストールしてから実行する前に構成する必要がある場合にも非常に役立ちます。たとえば、npmを使用してjson.packageファイルをインストールして構成し、構成済みのrunコマンドを呼び出す代わりに、代わりにnpxを使用します。実際の例:npx create-react-app my-app


3
どこにインストールし、コマンドの終了後に削除しますか、それとも一定期間キャッシュしますか、またはパッケージの最新バージョンがあることを常に確認しますか?
redOctober13

@ redOctober13いくつかのキャッシュがありますが、npxはnpmレジストリに毎回最新バージョンを要求するので、キャッシュは速度にあまり役立ちません。そして、それは拡大し、依存関係を毎回クリーンアップします。
Simon B.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.