1

基本的にユーザーが埋め込む「ウィジェット」であるスクリプトがあります。

シンプルなバニラ JavaScript だけで、他のリソースへの要求はありません。それはに位置しています/app/assets/javascripts/delivery.js

私がやりたいことは、ファイルを圧縮/コンパイルしてから、ユーザーがスクリプトタグから直接リンクできるようにすることです。<script src="http://example.com/assets/delivery.js"></script>

でも今は……それは仕方のないことです。そのファイルは本番環境には存在しません。

では、パイプライン内の他の JS ファイルと同じようにそのファイルを圧縮し、直接リンクするにはどうすればよいでしょうか?

4

2 に答える 2

3

追加すると

 config.assets.precompile += ['delivery.js']

application.rb に追加すると、delivery.js はマニフェスト ファイルとして扱われます。これはプリコンパイルされ、実稼働環境で delivery.js として提供されます。多くの場合、マニフェスト ファイルは単なる一連の//= require(または//= require_directory) ステートメントですが、それらに含まれるすべての JavaScript も生成されたファイルに追加されます。

デフォルトでは、application.js マニフェストにはすべてが含まれています。スタンドアローンでのみ提供されることを意図した JavaScript が含まれないように、これを微調整する必要があります。

于 2013-02-28T15:14:05.487 に答える
0

最初に、app/assets/javascripts/delivery.js が最上位の「マニフェスト」javascript ファイル (つまり app/assets/javascripts/application.js) のインクルードに含まれていないことを確認します。通常、application.js には が含ま//= require_tree .れているため、デフォルトで delivery.js が含まれています。それを変更する必要があります。"require_tree" を、プリコンパイルして application.js に結合するすべてのアセットの個々の "require" ステートメントに置き換えます。

次に、環境ファイル (本番環境用の config/environments/production.rb) を更新して、プリコンパイル済みアセットのリストにファイルを含めます。

config.assets.precompile += %w( delivery.js )

これで、public/assets ディレクトリに別のファイルとして保存され、application.js と同じ方法でコンパイルおよび圧縮されます。application.js と同様に、名前にダイジェストが添付されていることに注意してください (もちろん、config.assets.digest = false を設定してダイジェストなしでファイルを提供する場合を除きます)。

于 2013-02-28T16:15:03.310 に答える