Использование 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]
,