【问题标题】:Rails not minifying JS even though I set uglifier即使我设置了 uglifier,Rails 也没有缩小 JS
【发布时间】:2016-03-01 20:51:41
【问题描述】:

我为一个项目配置了 JS 和 CSS 压缩器,但我没有注意到 Javascript 文件的真正缩小。

在我的production.rb 我有:

config.assets.css_compressor = :sass
config.assets.js_compressor = :uglifier

CSS 似乎都被缩小了(不仅仅是捆绑在一起)。

我正在部署到 Heroku,我注意到它预编译了我的资产,而且它可能也进行了一些 GZip 压缩。

但是不知何故 JS 文件仍然有大量的空格,变量都保留了它们的默认名称,所以我猜它只是将所有文件捆绑在 application.js 中。

我是不是搞错了,或者这是预期的输出?如果我想真正缩小这些文件,我应该单独配置一些东西吗?

我想要的是类似于http://jscompress.com/ 中产生的东西或在minified jQuery version 上找到的东西。

谢谢!

【问题讨论】:

  • 您是说您的浏览器在生产 url 上显示未缩小的 js 和 css 文件,对吗?因为如果您只是在谈论您的开发环境,预计您会看到未缩小的资产。
  • 是的,我不是在谈论我的本地(开发)。我说的是我的生产环境。在 Heroku 上,具有生产设置以及暂存环境。他们都得到了未缩小的 JS。 CSS 看起来不错(缩小)。
  • @MilesStanfield,我发现我修改了错误的 JS 文件来触发压缩。这是触发压缩的必要步骤,否则 Rails 将使用缓存而不会触发它。

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


【解决方案1】:

我发现我正在修改不在资产管道上的 Javascript,因此不会触发压缩/缩小。

当我修改正确的文件时(在application.js 上加载,缩小正确触发 [0]。

所以,始终记得修改 Javascript 文件 [正在加载到资产管道上] 这样你才能触发压缩器,否则 Rails 将使用缓存的 javascript 文件他们不会被压缩。

[0] 还要注意无效字符: UglifyJS 最终因为.js 文件的第一行中的注释而失败。但在我删除评论 (<!-- (comment) ... ->) 后,它工作正常,我可以看到 application.js 在暂存中缩小。更多信息请点击此处https://stackoverflow.com/a/35751343/135767

【讨论】:

  • 这是完全错误的。您不必修改文件来“触发”资产编译,无论“触发”在此上下文中是什么意思。
  • 我没有说编译。编译总是被触发。我说的是压缩。压缩或缩小仅在资产被修改时触发(因此它是 mtime)。有关详细信息,请参阅stackoverflow.com/a/7988689/135767
  • 如果我错了,请纠正我,我很乐意编辑或删除我的答案。
  • 在我看来,你的整个问答都是错误的,没有任何价值。资产通过rake assets:precompile预编译,并且在那时进行压缩。通过修改文件来“触发”资产编译的想法毫无意义。即使文件的 mtime 在某种程度上是相关的,使用touch <file>。从文件中添加和删除垃圾行只是为了更新它的 mtime 是疯狂的。
  • 我没有添加行,我只是用touch 编辑了一个文件。 Heroku 会 precompile 文件,但直到我触摸资产管道中的一个文件,它们才被 Uglifier 压缩。我相信这是由于缓存。我对文件中的注释的问题只是一个侧节点,因为如果 < 包含在文件的开头,它在 UglifyJS 中会失败。和问题的主要解决方案无关,只是压缩的常见问题。
猜你喜欢
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2011-11-02
相关资源
最近更新 更多