Как удалить хэш из созданных Compass изображений изображений спрайтов?
Компас использует chunky_png для рендеринга спрайтов. Он добавляет хэш в конец файла, чтобы заставить кеши загружать новые спрайты изображений. Есть ли способ отключить этот кеш?
Ответы
Ответ 1
К сожалению, параметр asset_cache_buster :none
не отключает добавление хэша в конец имени файла.
Как я уже писал несколько раз (на французском), Compass не имеет возможности отключить кеш-кеш, но я предлагаю решение.
В файле конфигурации (например, config.rb
) добавьте следующие строки:
# Make a copy of sprites with a name that has no uniqueness of the hash.
on_sprite_saved do |filename|
if File.exists?(filename)
FileUtils.cp filename, filename.gsub(%r{-s[a-z0-9]{10}\.png$}, '.png')
end
end
# Replace in stylesheets generated references to sprites
# by their counterparts without the hash uniqueness.
on_stylesheet_saved do |filename|
if File.exists?(filename)
css = File.read filename
File.open(filename, 'w+') do |f|
f << css.gsub(%r{-s[a-z0-9]{10}\.png}, '.png')
end
end
end
Теперь используется compass clean
для удаления сгенерированных файлов и перезапуска компиляции с помощью compass compile
.
Вы получаете, например, файл images/icons-scb1e5456d5.png
file и a images/icons.png
. В таблицах стилей все ссылки на спрайты теперь указывают на версию без хеша.
Обязательно сохраните файл, содержащий хэш, чтобы оптимизировать время компиляции компасом.
Ответ 2
Установите asset_cache_buster :none
в свой config.rb как задокументированный в их ссылке на конфигурацию
Ответ 3
Лучшее решение можно найти в другом аналогичном вопросе.
Это лучше, потому что:
- Script изменяет имя перед генерированием спрайта - не после.
- Из-за пункта 1. нет необходимости с трудом изменять
.css
автоматически сгенерированный файл. Он генерируется с правильным именем от начала.
- Принятое решение делает
cp
(копия) сгенерированного спрайта с хешем, и он остается в файловой системе/репо как дубликат, что довольно плохо. Кроме того, он по-прежнему рассматривается как измененный с локальным репо, поэтому вы фиксируете два одинаковых файла. Решение могло бы сделать mv
, чтобы сменить имя сгенерированного хеш файла, чтобы очистить его, но в этом случае sprite будет генерироваться каждый раз, когда вы используете его в файле .scss
, так что это еще хуже.
Ответ 4
Я не тестировал спрайты, но это работает с replace-text-with-dimensions
, например:
config.rb:
# disable asset cache buster
asset_cache_buster do |http_path, real_path|
nil
end
Найдено в Файл конфигурации компаса на caring.com