我想有选择地压缩Rails 3.2应用程序中的一些javascript文件,但仍然在生产环境中从单个捆绑文件中提供所有js资源。
这样的语法,在app / assets / javascripts / application.js文件中,使用传递给最后3个链接:compress => false
的组成 require
选项指令我希望解释我想要实现的目标。
// 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文件包含一个angularjs控制器,该控制器利用angular的依赖注入,这需要特定的变量名称,如$scope
和$http
不会改变。
答案 0 :(得分:8)
我在 config / environment / production.rb 文件中使用此行
config.assets.js_compressor = Sprockets::LazyCompressor.new { Uglifier.new(:mangle => false) }
它会压缩我的控制器,但它不会更改方法签名,因此DI仍可按预期工作。
答案 1 :(得分:6)
要使用它与Rails 4一起使用,因为它使用了我使用的更新版本的链轮:
config.assets.js_compressor = Uglifier.new(mangle: false) if defined? Uglifier
答案 2 :(得分:3)
请注意,出于这个特定原因,可以选择使用字符串而不是变量名来指定注入的服务。查看控制器下面的行。
var MyController = function(renamed$scope, renamedGreeter) {
...
}
MyController.$inject = ['$scope', 'greeter'];
的示例