0

サイトのさまざまな機能領域に適切な JS ファイルのみを提供するために、多数の異なるマニフェスト ファイルが必要ですが、現在、マニフェストが次のようになるように、各ファイルで JS ファイル名とバージョン番号を複製する必要があります。

libs.js

//= require json2
//= require underscore-1.3.1
//= require jquery
//= require jquery-ui-1.8.17.custom.min
//= require jquery_ujs
//= require farbtastic-1.3u.gizmos
//= require bootstrap-2.0.1
//= require highstock-1.1.4.src
//= require exporting-1.1.4.src
//= require modernizr-2.5.3
//= require application
//= require validation
//= require navigation
//= require styles

libs-embedded.js

//= require json2
//= require jquery
//= require highstock-1.1.4.src
//= require exporting-1.1.4.src

これらのマニフェスト ファイルをこれらの .js.erb に相当するものに変更することで、これを修正しようとしました。

libs.js

<%= ManifestHelper.require_json2%>
<%= ManifestHelper.require_underscore%>
<%= ManifestHelper.require_jquery%>
<%= ManifestHelper.require_jquery_ui%>
<%= ManifestHelper.require_jquery_ujs%>
<%= ManifestHelper.require_farbtastic%>
<%= ManifestHelper.require_bootstrap%>
<%= ManifestHelper.require_highstock%>
<%= ManifestHelper.require_exporting%>
<%= ManifestHelper.require_modernizr%>
<%= ManifestHelper.require_application%>
<%= ManifestHelper.require_validation%>
<%= ManifestHelper.require_navigation%>
<%= ManifestHelper.require_styles%>

libs-embedded.js

<%= ManifestHelper.require_json2%>
<%= ManifestHelper.require_jquery%>
<%= ManifestHelper.require_highstock%>
<%= ManifestHelper.require_exporting%>

ManifestHelper クラスには、次のようなメソッドが含まれています。

  def self.require_underscore
    '//= require underscore-1.3.1'
  end

これは、多くのマニフェスト ファイルで使用されている JS ファイルとバージョン番号を 1 か所で管理できるようにすることを目的としています。

ただし、これを実行しようとすると、libs.js ファイルは次のようになります。

//= require json2
//= require underscore-1.3.1
//= require jquery
//= require jquery-ui-1.8.17.custom.min
//= require jquery_ujs
//= require farbtastic-1.3u.gizmos
//= require bootstrap-2.0.1
//= require highstock-1.1.4
//= require exporting-1.1.4
//= require modernizr-2.5.3
//= require application
//= require validation
//= require styles
//= require navigation;

これには 2 つの問題があります。まず、何らかの理由でセミコロンが導入されます。2 つ目は、生成された .js ファイルに //= requires ディレクティブで定義された連結された js ファイルが取り込まれていないことです。マニフェスト ファイルがディレクティブを読み込んだ後に発生します。

私の質問は...誰でもこの問題を解決する方法を提案したり、各マニフェストでjsファイルとバージョン番号の複製を停止するための代替ソリューションを提案したりできますか...

ありがとう、イアン

4

2 に答える 2

0

考えられる回避策の1つは、共有javascriptファイルを「共有」サブディレクトリに移動し、マニフェストファイルからrequire_directoryディレクティブを使用して共有ファイルをプルすることです。

//= require_directory shared

この方法の利点の1つは、JavaScriptファイルを「共有」ディレクトリにドロップするだけで、require_directoryステートメントを持つすべての親マニフェストで使用できるようになることです。マニフェストやヘルパーファイルの更新はありません。

唯一の潜在的な問題は、共有ファイルのロード順序に依存している場合、それらのファイルのロード順序を制御できないことです。ただし、サブディレクトリのインデックスマニフェストを使用してファイルの順序を静的に一覧表示し、親マニフェストからインデックスマニフェストをポイントすることで、もう少し手間をかけて整理できます。

于 2012-05-02T12:39:24.837 に答える
0

javascript ライブラリをラップする gem を使用することで、この問題を回避することができました。たとえば、次の gem を使用しています。 'select2-rails' gem 'underscore-rails' gem 'underscore-string-rails'

これにより、ライブラリの名前だけを使用して、関連する JavaScript ライブラリをマニフェストに含めることができます。例: //= select2-xyz が必要ではなく //= select2 が必要

明らかに、gem はアセット パイプラインの統合を管理するなど、多くの優れた機能を果たしますが、私が気に入ったライブラリのバージョン番号はいたるところにありませんでした。

于 2012-12-07T12:23:03.940 に答える