【问题标题】:Selective Rails 3.2 asset pipeline compression per file每个文件的选择性 Rails 3.2 资产管道压缩
【发布时间】:2012-08-08 23:55:37
【问题描述】:

我想选择性地压缩 Rails 3.2 应用程序中的一些 javascript 文件,但仍然在生产环境中从单个捆绑文件中提供所有 js 资产。

像这样的语法,在 app/assets/javascripts/application.js 文件中,使用 ma​​de-up :compress => false 选项传递给最后 3 个链轮 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 不被更改。

【问题讨论】:

    标签: javascript ruby-on-rails asset-pipeline angularjs


    【解决方案1】:

    为了让它与 Rails 4 一起使用,因为它使用了我使用的更新版本的链轮:

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

    在环境/production.rb 中

    【讨论】:

      【解决方案2】:

      请注意,出于这个特定原因,可以选择使用字符串而不是变量名来指定注入的服务。查看控制器下的行。

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

      示例取自http://docs.angularjs.org/guide/di

      【讨论】:

        【解决方案3】:

        我在我的 config/environment/production.rb 文件中使用了这一行

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

        它会压缩我的控制器,但不会更改方法签名,因此 DI 仍然可以按预期工作。

        【讨论】:

        • 非常感谢 Milan,在 Rails 3.2.6 中为我工作,angularjs 现在工作正常。
        • 出于好奇,Sprockets::LazyCompressor 部分是做什么的?
        • Rails 中的几乎所有内容都只是“外壳”,特定模式的每个具体实现都是通用的,因此您可以切换到替代方案。 Sprockets 是执行压缩、sass/less 预编译...和许多其他事情的引擎。 Sprockets::LazyCompressor.new 行为 js 压缩创建了惰性加载器,你可以使用任何东西。默认情况下,您使用 uglifier 压缩文件,上面的行只是告诉 uglifier 避免重命名方法参数的方法。
        • 当然,这个解决方案的替代方案是使用字符串显式注入,下面你可以找到 Jiří Pospíšil 响应如何编写可以用 uglifier 完全缩小的代码。
        猜你喜欢
        • 1970-01-01
        • 2013-01-31
        • 1970-01-01
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 2023-04-02
        • 2012-03-15
        • 1970-01-01
        相关资源
        最近更新 更多