3

Rails 3.2アプリで一部のJavaScriptファイルを選択的に圧縮したいのですが、本番環境ではすべてのjsアセットを単一のバンドルファイルから提供しています。

このような構文は、app / Assets / javascripts / application.jsファイル内で、最後の3つのsprocketsディレクティブに渡されたmake -up オプションを使用して、私が達成しようとしていることを説明していると思います。:compress => falserequire

// Contents of app/assets/javascripts/application.js
//
//= require jquery
//= require jquery_ujs
//= require angular-1.0.1/angular, :compress => false
//= require angular-1.0.1/angular-resource, :compress => false
//= require products, :compress => false

したがって、jquery.jsファイルとjquery_ujs.jsファイルは圧縮され(Railsアセットコンパイルによって、デフォルトでUglifierJSを使用します)、残りの3つのファイルは圧縮されませんが、application.jsバンドルにバンドルされます。

これを行うために利用できる方法はありますか?

動機は、products.jsファイルにangularの依存性注入を利用するangularjsコントローラーが含まれていることです。このコントローラーは、変更されていないなどの特定の変数名を必要と$scope$httpます。

4

3 に答える 3

8

config / environment/production.rbファイルでこの行を使用しています

config.assets.js_compressor = Sprockets::LazyCompressor.new { Uglifier.new(:mangle => false) }

コントローラを圧縮しますが、メソッドシグネチャは変更されないため、DIは引き続き期待どおりに機能します。

于 2012-08-12T18:06:37.550 に答える
6

私が使用した新しいバージョンのスプロケットを使用しているため、これをRails4で機能させるには次のようにします。

config.assets.js_compressor = Uglifier.new(mangle: false) if defined? Uglifier

environment/production.rbで

于 2013-03-23T03:50:54.350 に答える
3

この特定の理由により、注入されたサービスを変数名ではなく文字列で指定するオプションがあることに注意してください。コントローラの下の行を参照してください。

var MyController = function(renamed$scope, renamedGreeter) {
  ...
}
MyController.$inject = ['$scope', 'greeter'];

http://docs.angularjs.org/guide/diからの例

于 2012-12-07T12:46:32.147 に答える