npm
、bower
、およびvolo
をどのように比較しますか?
3つすべてを使用して、UIプロジェクトのJavaScript依存関係をインストールできます。 npm
はノード固有であると理解しています。
だから、いつ何を使うのですか?
npm
はまだ遠いですが、bower
とvolo
はまったく同じ問題を解決しているようですが、npm
とbower-volo
の間に線を引くことはできません。
Npmとbowerの違いを最もよく説明する説明は、npmはパッケージと呼ばれるJavaScriptモジュールを管理し、Bowerはコンポーネントと呼ばれるフロントエンドコンポーネント(つまり、css、html、およびJavaScript)を管理します。 npmは、bowerのインストールにも使用されます。 npmとbowerの拡張記事 (voloはカバーしていません)を詳しく説明します。
機能はほとんどありませんが、フロントエンド開発者の間では依然として非常に人気があります。すべてのフロントエンドパッケージがそれを使用しています。 bowerをnpmにマージするイニシアチブ もあります。
Bowerはクライアント側に最適化されており、フラットな依存関係ツリーのみをサポートします。つまり、 各ライブラリは1回だけ使用する必要があります (同じライブラリの異なるバージョンをクライアントに出荷するのはコストがかかるため)、および依存関係制約はユーザーが解決する必要があります。
Bowerレジストリ(bower search <some keyword>
)でフロントエンドに関連するものを見つけることができると期待できます-私の意見では、それは他のパッケージマネージャーとの関係でbowerの最大の利点です。
私はまだ何年も5分以上それを使用していません。それについて知らない しかし、私が見ることができるものから それは、Gruntユーザーに非常に馴染みのあるビルドツールを含んでいます。
はい、npmはNode Package Managerの略です。しかし、最近ではすべてに使用できます。人々はもはやnpm install
ingだけでなく、Node環境でonlyのみ動作することを期待しています。たとえば、多くの Twitter Bootstrapのnpmパッケージ があります。
Npmは、ネストされた依存関係ツリーを使用して、サーバー側での使用に最適化されています。各依存関係は、独自の依存関係を持つことができます。これにより、各依存関係が独自のバージョンを使用できるため、依存関係のバージョンの競合がなくなりました。アンダースコア。ただし、今後の npmバージョン3は依存関係ツリーをフラット化します :
Npm @ 3を使用すると、node_modulesディレクトリが大幅にフラットになります。すべての依存関係とほとんどのサブ依存関係(および(サブ)+依存関係)は、トップレベルで隣り合わせになります。競合がある場合のみ、モジュールはより深いレベルでインストールされます。これにより、Windowsユーザーの作業が非常に簡単になります。
Npmの使用に関して私が見るいくつかの利点:
npmはJavaScriptのパッケージマネージャーです。
2013年2月現在、私の意見は以下のとおりです。 これ以上考慮しないでください。
Nodeプロジェクトを使用している場合は、これに固執することをお勧めします。ブラウザでも使用できるプロジェクトはほとんどありません...
バウアーは今ポップな男です。彼らには多くのプロジェクトがあり、プロジェクトメンテナはそれらをバウワーレジストリで最新の状態に保ちたいと思っています...
彼が時々少しバグだらけになるのは残念だ。
それ以来、5分以上voloを試していませんが、私が見ることができることから、bowerよりも柔軟であるように見えます。
Voloのマイナス点は、プロジェクトが非常に古いことです。
彼らは同じ問題を解決しているように見えますが、異なる環境/世界のためです。 nodejsおよびvoloのNPM、ブラウザーのおかげ。
真実は、NPMを使用してブラウザーのjavascriptとcssを管理することもできるということです。あなたがそれをすることを妨げるものは何もありません。その意味で、NPMを使用することは、同じ目的で2つの異なるツールを管理するよりも自然に感じます。
少なくともより人気のあるものについては、bowerにはより多くのパッケージが用意されているようです。しかし、すぐに jQueryもNPMで直接利用可能になります と、おそらく他のすべてのライブラリも同じ傾向に従います。
私の意見では、browserifyやwebmake、ブラウザでノードモジュールを使用するのに役立つ、bowerまたはvolo、ただし、他に何かを提供しない限り(レジストリにのみ存在する特定のモジュール)。
VoloとBowerも良いですが、私の観点からは、すでにNPMを使用している場合は、それにこだわることをお勧めします。
browserifyまたはwebmakeを使用しなくても、NPMを使用してクライアントの依存関係を管理できることに注意してください。私が取り組んでいるほとんどのプロジェクトでは、npmモジュールをインストールした後、スクリプトを実行して、クライアントアプリケーションが使用する場所にそれらを展開します。 gruntを使用してそのファイルを他のjsファイルと連結することもあれば、Webアプリのテンプレートファイルから直接参照することもあります。いずれにせよ、これは個人的な好みです。他の人は、より自然にワークフローに収まるので、BowerまたはVoloを使いやすいと感じるかもしれません。
NPMに対するBowerの大きな利点は、その依存関係管理がコンポーネントの単一バージョンの使用を強制することです(一方、NPMは、異なるモジュールのサブ依存関係として異なるコピー/バージョンを持つことで機能します)。これはA VERY GOOD THINGです。これは、異なるバージョンのコンポーネントの複数のコピーを含める必要があるため、クライアント側のJavaScriptが肥大化するのを防ぐためです。モジュールの複数のコピーを含めることは、NPMの依存関係管理のしくみの中心であり、したがって、NPMはクライアント側のパッケージ管理にはまったく適していません。
上記の結果は、競合を回避するために、バウアーパッケージのメンテナーと消費者が依存関係のバージョン番号を維持することをより意識する必要があるということです。しかし、それは支払う価値があります。また、NPMモジュールはメジャーリリース、マイナーリリース、およびパッチリリースの発行でしばしばずさんであるため、NPM依存関係管理もバラのベッドではありません。
これは質問の範囲内ではないことは知っていますが、別の選択肢もあります。 Jam JS- http://jamjs.org/ 興味深いことの1つは、ジャムにうっとりするような機能があることです。
jam compile output.js
誰かがさらに別のパッケージマネージャーを作成し、名前を付ける必要があります:yapm :)