【问题标题】:How to do JS pre-processing with Uglifier and assets pipeline?如何使用 Uglifier 和资产管道进行 JS 预处理?
【发布时间】:2012-08-29 03:50:44
【问题描述】:

我正在尝试做的(我不确定是否可能)是使用 UglifierJS 使用它的 AST 'mangle' 选项对象来预处理 JS 文件。您可以将一个选项 {defines: {DEVMODE: true}} 传递给 UglifyJS:https://github.com/mishoo/UglifyJS#use-as-a-code-pre-processor

与 Rails 一起使用的 Uglify GEM 基本上使用相同,“定义”不应该是 GEM 实现的一部分,但我对其进行了硬编码以更改 gem 的几行,因此它将作为一个包含在内更多选择。

无论如何,重点是开发中如何使用预处理的方式,让assets pipeline 以这种方式传递JS文件?

【问题讨论】:

    标签: ruby-on-rails asset-pipeline uglifyjs


    【解决方案1】:

    我添加了对 Uglifier 定义的支持。尚未发布,但您可以根据 git 上的最新版本使用。

    宝石文件:

    gem 'uglifier', :git => 'https://github.com/lautis/uglifier.git'
    

    用使用过的定义实例化 Uglifier,例如

    Uglifier.new(:define => {"DEVMODE" => true})
    

    或者,在使用资产管道时,您可以将 erb 预处理器与 JS 代码一起使用。将文件命名为 something.js.erb 并编写如下代码

    <% if Rails.env.development? %>
      console.log(debug)
    <% end %>
    

    【讨论】:

    • 非常感谢@Lautis 的回答。虽然 ERB 是一种极好的方法,但有没有办法在资产管道中使用 Uglifier,仅使用 :define 选项来预处理开发中的 JS 输出? (可能)更快更漂亮:)
    • 您可以在开发环境中启用压缩并将 Uglifier 设置为不真正压缩 JS(mangle: false,squeeze: false)。它仍然会很慢。我可能会有一个 env.js.erb ,其中设置了 DEVMODE 和类似的常量。您可以使用 Uglifier 在生产环境中设置这些值,并在部署的资产中完全省略日志记录代码。
    • 不错。再次感谢您的宝贵建议!
    猜你喜欢
    • 2018-02-23
    • 2014-09-07
    • 1970-01-01
    • 2014-09-21
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多