Использование guard для минимизации файлов javascript в другой каталог

Я пытаюсь создать свой первый файл защиты и столкнулся с трудностями, пытаясь минимизировать некоторые из моих файлов JavaScript.

Я хочу, чтобы охранник наблюдал за каталогом 'app / assets /js' и каждый раз, когда в этом каталоге изменялся файл, чтобы минимизированная версия файла создавалась в 'public /js' с тем же именем и, если возможно, внутри то же имя каталога.

Например, если бы я сохранил файл bootstrap.js в app / assets / js / vendor, я бы хотел, чтобы минимизированная версия была помещена в публичный файл / 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, поэтому ответы на новички будут оценены по достоинству. Благодарю.

1 ответ

Решение

Вы пишете в тот же файл, который читаете. По вашему вопросу вам нужно что-то вроде:

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

Обратите внимание на группу захвата, которую я добавил в регулярное выражение, чтобы я мог получить имя файла с помощью m[1],

Другие вопросы по тегам