使用Compass/Sass移除附加到精灵文件名的随机字符串

7

我最近使用Compass和Sass进行CSS spriting,发现它非常有用。

然而,文件名总是附加一个随机字符串。例如:icons-s5eb424578c.png。我不想附加这个随机字符串,因为这意味着每次更改都需要上传新的CSS文件和新的sprite图像。

所以,有人知道在Compass gem目录中哪个Ruby或其他配置文件会添加这个随机字符串吗?那么我就可以注释掉那一部分的代码。除非我错过了一个官方变量,可以告诉Compass我不想附加这个字符串?

提前感谢任何对此的帮助。


看看这个能否帮到你:https://dev59.com/4Wox5IYBdhLWcg3wekIr - cimmanon
谢谢@cimmanon。那正是我在寻找的答案。如果我知道这是一个缓存问题,我的搜索查询可能会让我找到它! - Peter J Langley
这不是随机的,而是一个哈希标识生成的文件(https://github.com/Compass/compass/issues/1374)。它不应该在每次编译时都改变,只有当精灵发生变化时才会改变。 - sam
2个回答

17

尝试将以下代码添加到您的config.rb文件中:

module Compass::SassExtensions::Functions::Sprites
  def sprite_url(map)
    verify_map(map, "sprite-url")
    map.generate
    generated_image_url(Sass::Script::String.new(map.name_and_hash))
  end
end

module Compass::SassExtensions::Sprites::SpriteMethods
  def name_and_hash
    "sprite-#{path}.png"
  end

  def cleanup_old_sprites
    Dir[File.join(::Compass.configuration.generated_images_path, "sprite-#{path}.png")].each do |file|
      log :remove, file
      FileUtils.rm file
      ::Compass.configuration.run_sprite_removed(file)
    end
  end
end

module Compass
  class << SpriteImporter
    def find_all_sprite_map_files(path)
      glob = "sprite-*{#{self::VALID_EXTENSIONS.join(",")}}"
      Dir.glob(File.join(path, "**", glob))
    end
  end
end

我使用 Compass 0.12.2 (Alnilam) 没有问题。


2
这个解决方案比第一个好多了。它在生成之前更改名称,而不是直接更改CSS。 - s3m3n

5
在您的项目配置文件中输入以下内容:
asset_cache_buster :none

# 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.mv 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?v\1')
    end
  end
end

此处提供相关内容:如何在Compass生成的精灵图像文件名中去除哈希值?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接