【问题标题】:Using guard to minify javascript files into a different directory使用guard将javascript文件缩小到不同的目录
【发布时间】:2013-12-28 17:03:16
【问题描述】:

我正在尝试创建我的第一个保护文件,但在尝试缩小我的一些 javascript 文件时遇到了困难。

我希望守卫监视“app/assets/js”目录,以及任何时候在此目录中更改文件,以便在“public/js”中创建具有相同名称的文件的缩小版本,如果可以在同一个目录名中。

例如,如果我将 bootstrap.js 文件保存在 app/assets/js/vendor 中,我希望将缩小版本放置在 public/js/vendor/bootstrap.min.js 文件中。

以下是我当前保护文件的相关部分:

require 'cssmin'
require 'jsmin'

module ::Guard
  class Refresher < Guard
  end
end

# 
guard :refresher do
  watch('public/css/styles.min.css') do |m|
    css = File.read(m[0])
    File.open(m[0], 'w') { |file| file.write(CSSMin.minify(css)) }
  end
  watch(%r[app/assets/js/.+]) do |m|
    js = File.read(m[0])
    File.open(m[0], 'w') { |file| file.write(JSMin.minify(js)) }
  end
end

这是我对 Ruby 的第一次体验,因此非常感谢面向初学者的回答。谢谢。

【问题讨论】:

  • Howq 我如何监视“app/assets/js”目录以及任何时候在此目录中更改文件,以便在“public/js”中创建文件的缩小版本' 具有相同的名称,并且如果可能在相同的目录名称中?

标签: javascript ruby guard


【解决方案1】:

你写入你正在阅读的同一个文件。根据您的问题,您需要以下内容:

watch(%r[app/assets/js/(.+)]) do |m|
  File.write("public/js/#{ m[1] }", JSMin.minify(File.read(m[0])))
end

请注意我添加到正则表达式的捕获组,以便我可以使用m[1] 获取文件名。

【讨论】:

  • 感谢您的回答,真的很有帮助。我将正则表达式修改为 %r[app/assets/js/(.+)\.js] ,然后将第二行更改为 File.open("public/js/#{ m[1] }.min.js" , 'w+') { |文件| file.write(JSMin.minify(File.read(m[0])))} 以便在 public/js 目录下创建一个 .min.js 文件。我注意到你是一名后卫核心团队成员,我只想感谢你和团队的其他成员制作了一个出色的插件。非常感谢。
  • 感谢您的客气话。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
相关资源
最近更新 更多