Как удалить хеш из имен файлов спрайтов, созданных Compass? - PullRequest
14 голосов
/ 08 февраля 2012

Компас использует chunky_png для рендеринга спрайтов.Он добавляет хеш в конец файла, чтобы заставить кэши загружать новые спрайты изображений.Есть ли способ выключить этот кеш?

Ответы [ 4 ]

23 голосов
/ 17 февраля 2012

К сожалению, опция 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. В таблицах стилей все ссылки на спрайты теперь указывают на версию без хеша.

Обязательно сохраните в файле хеш, чтобы оптимизировать время компиляции с помощью Compass.

22 голосов
/ 08 февраля 2012

Установите asset_cache_buster :none в вашем config.rb как , задокументированный в справочнике по их конфигурации

4 голосов
/ 15 октября 2013

Лучшее решение можно найти в другом подобном вопросе .

Это лучше, потому что:

  1. Сценарий меняет имя до создания спрайта, а не после.
  2. Из-за пункта 1. нет необходимости менять .css автоматически сгенерированный файл.Он генерируется с правильным именем с начала.
  3. Принятое решение создает cp (копию) сгенерированного спрайта с хэшем и остается в файловой системе / репо как дубликат, что довольно плохо.Кроме того, он все еще считается измененным в локальном репо, поэтому вы фиксируете два одинаковых файла.Решение может сделать mv, чтобы изменить имя сгенерированного хеш-файла, чтобы очистить его, но в этом случае спрайт будет генерироваться каждый раз, когда вы используете его в файле .scss, так что это даже хуже.
1 голос
/ 30 октября 2012

Я не тестировал со спрайтами, но это работает с replace-text-with-dimensions, например:

config.rb:

# disable asset cache buster
asset_cache_buster do |http_path, real_path|
  nil
end

Найдено в Файл конфигурации компасана caring.com

...