您的位置:首页 > Web前端 > JavaScript

rails的erb模板文件内嵌js脚本的压缩

2012-04-12 14:22 239 查看
这是在发布之前做的事情。生成文件替换原来的文件然后发布。

# -*- coding:utf-8 -*-
# 约定!
# 凡是.html.erb内嵌在script中的js代码如果是要本程序压缩的,那么在
# <script type="text/javascript">/* javascript block */</script>的javascript block中
# 不可以包含任何嵌入的erb模板标签。(否者压缩会出错)
# 如果javascript block中需要嵌入erb模板标记请按照下面的方法做:
# <script type="text/javascript" yyjcompress="false">
# var avatarPath = "<%= "#{@member.avatar}" %>";
# </script>
# 上面的js代码不会被压缩,因此不用担心因为包含erb模板标签而使script中的js压缩失败。
# 要压缩的部分这样写:
# <script type="text/javascript" yyjcompress="no">
# $(this).find("img").attr("src", "/" + avatarPath);
# </script>
# 这样上面的代码会被正确的压缩,又能使用erb模板标签生成的变量。
# 代码稍作修改以后也可以用于其它任何web框架的前端页面内嵌js的压缩。
# yuyingjian 2012-3-31

require 'uglifier'

#infile 输入.html.erb文件路径
#outfile 输出.html.erb文件路径
def compress_js_in_erb(infile, outfile)
compressed_erb = File.read(infile).gsub(/(?<=<script type="text\/javascript" yyjcompress=\"true\">)[\s\S]+?(?=<\/script>)/) do |js_block|
Uglifier.compile(js_block, :ascii_only => true, :copyright => true)
end
File.open(outfile, "w") { |f| f.write(compressed_erb) }
end

#inpath 一般是rails的app/views的路径
#outpath 存放压缩文件的新views文件夹路径 Dir.mkdir不能创建嵌套的文件夹 所以你自己创建一下吧-_-
def convert_erb_js_min(inpath,outpath)
if File.directory? inpath
if !File.directory? outpath
Dir.mkdir(outpath)
end
Dir.foreach(inpath) do |file|
if file !="." and file != ".."
convert_erb_js_min(inpath+"/"+file, outpath+"/"+file)
end
end
else
if inpath =~ /\.html\.erb$/
compress_js_in_erb(inpath, outpath)
end
end
end

convert_erb_js_min("./views", "./compress/views")
好了,把views文件夹替换为生成的,里面的scirpt已经被压缩了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: