【问题标题】:Jammit compression works in dev mode, but not as compressed JSJammit 压缩在开发模式下工作,但不像压缩的 JS
【发布时间】:2011-03-10 10:48:51
【问题描述】:

我的 Rails 应用程序现在进步很大,我想正确压缩包含的 JS 文件(带有插件的 Aloha 编辑器 + Gritter,用超过 1MB 的 JS 组成多个文件)。我决定使用 Jammit,因为它具有良好的 Rails 集成。这是我的 config/assets.yml:

package_assets:          always
javascript_compressor:   closure
compressor_options:
  compilation_level: ADVANCED_OPTIMIZATIONS

javascripts:
  admin:
    - public/aloha/aloha.js
    - public/aloha/plugins/com.gentics.aloha.plugins.Format/plugin.js
    - public/aloha/plugins/com.gentics.aloha.plugins.Table/plugin.js
    - public/aloha/plugins/com.gentics.aloha.plugins.List/plugin.js
    - public/aloha/plugins/com.gentics.aloha.plugins.Link/plugin.js
    - public/javascripts/*.js
    - public/javascripts/gritter/*.js

解释:aloha.js 是一个扩展的 jQuery 1.4.2 库,/javascripts/.js 和 /gritter/.js 中的文件主要依赖它(jQuery)。 我在我的视图代码中包含标签

<%= include_javascripts :admin %>

直截了当。

当切换到开发模式(assets.yml 有 package_assets: 开启)时,Jammit 会单独处理 JS 文件并将它们一个一个嵌入,我的应用程序就很好了。

然而,当处于生产模式时(env = :production,或者 assets.yml 有 package_assets: 总是),Jammit 会创建一个大约 700kB 的压缩 JS 文件(哇,那是一个胖怪物),它可以正确嵌入,但我得到了一个页面加载时出现 JS 错误“jQuery 未定义”。我的第一个猜测是 JS 文件的顺序在编译过程中发生了变化,即使它不应该?

还有一件事:让压缩器保持默认 (yui) 会导致加载时出现更严重的 JS 错误。

有人可以帮帮我吗?

【问题讨论】:

    标签: jquery ruby-on-rails-plugins jammit


    【解决方案1】:

    我们在使用执行“高级优化”的编译器压缩 Aloha 编辑器时遇到了很多问题 - aloha 核心编译正常,但 ExtJS 依赖项编译失败。

    由于aloha.js已经编译好了,看看它是否可以跳过编译直接连接到结果文件而不是再次编译。

    要尝试的另一件事是查看您是否可以在编译器中仅启用whitespace_only 选项或basic_optimisations。这将显示它是否是编译过程的问题。

    【讨论】:

      【解决方案2】:

      文件的顺序可能是问题所在。我建议明确指定每个文件并按照您希望它们的顺序(即不要执行 /*.js)。

      如果这对您有用,那么您可以将一些不需要订单的 javascript 文件移动到子文件夹中并在该子文件夹上调用 /*.js。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多