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

这是在发布之前做的事情。生成文件替换原来的文件然后发布。

# -*- 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已经被压缩了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值