web-dev-qa-db-ja.com

JavaScript依存関係管理:npm vs. bower vs. volo

npmbower、およびvoloをどのように比較しますか?

3つすべてを使用して、UIプロジェクトのJavaScript依存関係をインストールできます。 npmはノード固有であると理解しています。

だから、いつ何を使うのですか?

npmはまだ遠いですが、bowervoloはまったく同じ問題を解決しているようですが、npmbower-voloの間に線を引くことはできません。

160
Yugal Jindle

Npmとbowerの違いを最もよく説明する説明は、npmはパッケージと呼ばれるJavaScriptモジュールを管理し、Bowerはコンポーネントと呼ばれるフロントエンドコンポーネント(つまり、css、html、およびJavaScript)を管理します。 npmは、bowerのインストールにも使用されます。 npmとbowerの拡張記事 (voloはカバーしていません)を詳しく説明します。

104
strangeloops

機能はほとんどありませんが、フロントエンド開発者の間では依然として非常に人気があります。すべてのフロントエンドパッケージがそれを使用しています。 bowerをnpmにマージするイニシアチブ もあります。

Bowerはクライアント側に最適化されており、フラットな依存関係ツリーのみをサポートします。つまり、 各ライブラリは1回だけ使用する必要があります (同じライブラリの異なるバージョンをクライアントに出荷するのはコストがかかるため)、および依存関係制約はユーザーが解決する必要があります。

Bowerレジストリ(bower search <some keyword>)でフロントエンドに関連するものを見つけることができると期待できます-私の意見では、それは他のパッケージマネージャーとの関係でbowerの最大の利点です。

ヴォロ

私はまだ何年も5分以上それを使用していません。それについて知らない しかし、私が見ることができるものから それは、Gruntユーザーに非常に馴染みのあるビルドツールを含んでいます。

npm

はい、npmはNode Package Managerの略です。しかし、最近ではすべてに使用できます。人々はもはやnpm installingだけでなく、Node環境でonlyのみ動作することを期待しています。たとえば、多くの Twitter Bootstrapのnpmパッケージ があります。

Npmは、ネストされた依存関係ツリーを使用して、サーバー側での使用に最適化されています。各依存関係は、独自の依存関係を持つことができます。これにより、各依存関係が独自のバージョンを使用できるため、依存関係のバージョンの競合がなくなりました。アンダースコア。ただし、今後の npmバージョン3は依存関係ツリーをフラット化します

Npm @ 3を使用すると、node_modulesディレクトリが大幅にフラットになります。すべての依存関係とほとんどのサブ依存関係(および(サブ)+依存関係)は、トップレベルで隣り合わせになります。競合がある場合のみ、モジュールはより深いレベルでインストールされます。これにより、Windowsユーザーの作業が非常に簡単になります。

Npmの使用に関して私が見るいくつかの利点:

  • 他のすべてのパッケージマネージャー(コンポーネント、bower、volo、JSPMなど)で使用されます。
  • ビルドスクリプトの使用を許可します。
  • Npmベースのパッケージを内省するための多くのツールが利用可能です

npmはJavaScriptのパッケージマネージャーです。

npmjs.com screenshot


2013年2月現在、私の意見は以下のとおりです。 これ以上考慮しないでください。

npm

Nodeプロジェクトを使用している場合は、これに固執することをお勧めします。ブラウザでも使用できるプロジェクトはほとんどありません...

バウアーは今ポップな男です。彼らには多くのプロジェクトがあり、プロジェクトメンテナはそれらをバウワーレジストリで最新の状態に保ちたいと思っています...

彼が時々少しバグだらけになるのは残念だ。

ヴォロ

それ以来、5分以上voloを試していませんが、私が見ることができることから、bowerよりも柔軟であるように見えます。

Voloのマイナス点は、プロジェクトが非常に古いことです。

72
gustavohenke

彼らは同じ問題を解決しているように見えますが、異なる環境/世界のためです。 nodejsおよびvoloのNPM、ブラウザーのおかげ。

真実は、NPMを使用してブラウザーのjavascriptとcssを管理することもできるということです。あなたがそれをすることを妨げるものは何もありません。その意味で、NPMを使用することは、同じ目的で2つの異なるツールを管理するよりも自然に感じます。

少なくともより人気のあるものについては、bowerにはより多くのパッケージが用意されているようです。しかし、すぐに jQueryもNPMで直接利用可能になります と、おそらく他のすべてのライブラリも同じ傾向に従います。

私の意見では、browserifywebmake、ブラウザでノードモジュールを使用するのに役立つ、bowerまたはvolo、ただし、他に何かを提供しない限り(レジストリにのみ存在する特定のモジュール)。

VoloBowerも良いですが、私の観点からは、すでにNPMを使用している場合は、それにこだわることをお勧めします。

browserifyまたはwebmakeを使用しなくても、NPMを使用してクライアントの依存関係を管理できることに注意してください。私が取り組んでいるほとんどのプロジェクトでは、npmモジュールをインストールした後、スクリプトを実行して、クライアントアプリケーションが使用する場所にそれらを展開します。 gruntを使用してそのファイルを他のjsファイルと連結することもあれば、Webアプリのテンプレートファイルから直接参照することもあります。いずれにせよ、これは個人的な好みです。他の人は、より自然にワークフローに収まるので、BowerまたはVoloを使いやすいと感じるかもしれません。

24
roy riojas

NPMに対するBowerの大きな利点は、その依存関係管理がコンポーネントの単一バージョンの使用を強制することです(一方、NPMは、異なるモジュールのサブ依存関係として異なるコピー/バージョンを持つことで機能します)。これはA VERY GOOD THINGです。これは、異なるバージョンのコンポーネントの複数のコピーを含める必要があるため、クライアント側のJavaScriptが肥大化するのを防ぐためです。モジュールの複数のコピーを含めることは、NPMの依存関係管理のしくみの中心であり、したがって、NPMはクライアント側のパッケージ管理にはまったく適していません。

上記の結果は、競合を回避するために、バウアーパッケージのメンテナーと消費者が依存関係のバージョン番号を維持することをより意識する必要があるということです。しかし、それは支払う価値があります。また、NPMモジュールはメジャーリリース、マイナーリリース、およびパッチリリースの発行でしばしばずさんであるため、NPM依存関係管理もバラのベッドではありません。

15
wheresrhys

これは質問の範囲内ではないことは知っていますが、別の選択肢もあります。 Jam JS- http://jamjs.org/ 興味深いことの1つは、ジャムにうっとりするような機能があることです。

jam compile output.js

誰かがさらに別のパッケージマネージャーを作成し、名前を付ける必要があります:yapm :)

5
Bruce Lim