2012-08-12 23 views
3

我想選擇性地壓縮Rails 3.2應用程序中的一些JavaScript文件,但仍然擁有生產環境中單個捆綁文件提供的所有js資源。選擇性導軌3.2每個文件的資產流水線壓縮

語法這樣,應用程序/資產/ Java腳本/ application.js中的文件裏,使用傳遞給最後3個鏈輪require指令我希望編造:compress => false選項解釋什麼,我想要的目的。

// 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個文件將不會被壓縮,但它們將被捆綁到應用程序中.js包。

有沒有辦法做到這一點?

動機是products.js文件包含一個angularjs控制器,該控制器利用角度的依賴注入,這需要特定的變量名稱,例如$scope$http未被更改。

回答

8

我用這條線在我配置/環境/ production.rb文件

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

它壓縮我的控制器,但它不會改變方法簽名,以便DI仍然按預期工作。

+0

非常感謝米蘭,在Rails 3.2.6中爲我工作,angularjs現在工作正常。 – 2012-08-14 20:08:32

+0

出於好奇,'Sprockets :: LazyCompressor'部分是做什麼的? – 2013-04-23 14:00:10

+0

幾乎在rails中的所有東西都只是「shell」,每個特定模式的具體實現都是一般化的,因此您可以切換到其他選項。鏈輪是做壓縮,sass /少量預編譯......以及許多其他事情的引擎。 Sprockets :: LazyCompressor.new行爲js壓縮創建了惰性加載器,您可以使用任何東西。默認情況下,使用uglifier來壓縮文件,上面的行只是告訴uglifier避免重命名方法參數的方法。 – 2013-04-23 22:08:21

3

請注意,由於這個特定的原因,有一個選項可以用字符串而不是變量名來指定注入的服務。看到控制器下的線。從http://docs.angularjs.org/guide/di

6

採取

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

實例爲了得到這個使用Rails 4的工作,因爲它使用鏈輪較新版本的我用:

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

在環境

/production.rb

相關問題