【发布时间】:2010-09-27 16:47:30
【问题描述】:
向 Rails 和 Javascript 大师致敬!
我有一个项目,我在
中返回一个大型 javascript 文件respond_to do |format|
format.js
end
阻止。
我试图弄清楚如何缩小或压缩 .js 响应,因为 .js.erb 视图充满了 cmets,并且大小会根据控制器的结果而变化。
有人有什么想法吗?
【问题讨论】:
向 Rails 和 Javascript 大师致敬!
我有一个项目,我在
中返回一个大型 javascript 文件respond_to do |format|
format.js
end
阻止。
我试图弄清楚如何缩小或压缩 .js 响应,因为 .js.erb 视图充满了 cmets,并且大小会根据控制器的结果而变化。
有人有什么想法吗?
【问题讨论】:
对于 Rails 4:
render js: Uglifier.new.compile(render_to_string)
【讨论】:
好吧,也许我有一个解决方案:
respond_to do |format|
format.js { self.response_body = minify(render_to_string) }
end
这非常有效。当然,关键是 minify 方法。你会发现很多 JS 缩小器。例如,您可以使用这个(如果许可证允许的话):http://github.com/thumblemonks/smurf/raw/master/lib/smurf/javascript.rb - 它基于 Crockford 的 jsmin.c。
如果你把这个文件放到你的库中,需要它,你的 minify 方法可能如下所示:
def minify(content)
min = Smurf::Javascript.new(content)
min.minified
end
希望对你有所帮助。
如果您打算自动缩小,那么您可能应该选择一个中间件。令人惊讶的是我找不到任何东西(有很多针对 CSS/JS,但它是关于静态资产而不是动态内容)但编写它不会是一个问题。
【讨论】:
对于使用内置 Uglifier 方法的 rails 3(资产管道的默认设置)
查看上面 Radek 的代码,然后将其换掉。
def minify(content)
Uglifier.new.compile(content)
end
【讨论】: