0

Ruby gem を使用して JavaScript ライブラリを Rails プロジェクトに含めるのと、JavaScript ファイルを自分で含めるのとでは、どのような違いがあるのでしょうか。

バンドラーを使用して js ライブラリのバージョンをロックダウンするか、手動で js ファイルをコピーしてプロジェクトに貼り付ける代わりに、1 つのコマンドでバンドラーを介してすべての js ライブラリを更新できることを私は知っています。Rails::Engine クラスはどのくらいのオーバーヘッドを追加しますか?これが Rails アプリで利用可能な gem からアセット ファイルを取得する唯一の方法ですか? これらのライブラリを含めるための「最良の」方法を示すその他の顕著な違いはありますか?

4

2 に答える 2

0

olaf_from_norwedenからのredditへの素晴らしい投稿と答え:

TwitterBootstrapgemのSassポートが実際に何をするかを見ていきましょう。

https://github.com/thomas-mcdonald/bootstrap-sass/blob/master/lib/bootstrap-sass.rb

ブートストラップgemがRailsの初期化で評価されるとき(サーバーを起動するとき)、環境に応じてそれ自体のさまざまな部分をロードするためにrequireを使用します。

Compass Sassフレームワークgemがロードされると、CompassにRailsアセットフォルダーパスを使用するように指示します。

アセットパイプラインでRailsバージョンを使用している場合は、空のRails::Engineが読み込まれます。

エンジンは、他のRailsアプリにマウントできる単なるRailsアプリです。Railsは、初期化中にエンジンに遭遇すると、関連するファイルをロードするためにエンジンが指定するパスを検索します。

この場合、gemspecは、初期化中に、含まれているベンダーディレクトリ内の.scss / .png/.jsファイルについてRailsに通知します。

開発モードでは、Railsは、メインアプリケーションの他のアセットとともに、すべてのリクエストでこれらのアセットを再コンパイルします。

本番環境では、ブートストラップgemはGemfileの:assetsグループに含まれるため、ロードされません。

それが理にかなっていることを願っています。最良または最も顕著な説明ではありません。また、gemが本番環境にロードされた場合でも、アセットをコンパイルしない限り、Railsはアセットディレクトリを探しません。だからそれも問題ではありません。

于 2012-10-23T17:31:38.007 に答える
0

このRails::Engineクラスは、アセットのみを提供する gem としてはやり過ぎです (実行中のコードが多くないため、無害であっても)。レイルタイがあれば十分です。いずれにせよ、違いはごくわずかです。

外部 gem を使用すると、アセットをプロジェクトに保存して保存できます。

たとえば、angular-rails gem は、何かを生成するためのオフライン コードを提供しますが、アプリには影響しません。

一方で、必要に応じて gem メンテナーが新しいバージョンのライブラリで更新するのを待つ必要があります。

于 2012-10-09T15:32:54.970 に答える