我对Laravel 5.0相当新,但不是PHP。我一直在玩Elixir来编译我的SASS,从我的资源目录中复制图像并通过mix.version
函数运行它们以防止缓存。
这适用于CSS,图像和JavaScript;有没有可能让Elixir缓存 - 破坏我的CSS / SASS中链接的图像?当然,它很容易对图像进行版本控制,但有没有办法调整CSS以反映新的文件名?
我发现了这个:https://github.com/trentearl/gulp-css-url-adjuster 它允许您将查询参数附加到CSS文件中的文件路径,这样就解决了问题的一半。如果每次gulp运行都可以自动更改查询参数,我会很高兴使用它。
有关如何实现这一目标的任何想法,或者是否有可能实现?
我想这样做的原因是我不断开发我的应用程序并使用大型精灵表,这通常是重新排列,缓存清除是一项要求,如果它可以是自动的,当gulp运行时节省了我很多时间和精力。
由于
答案 0 :(得分:3)
当您使用SASS时,可以在SASS文件中定义可用于缓存清除的自定义变量,然后将该变量附加到任何图像URL路径。
变量只需要保存对当前时间戳的引用。
为此,您需要create a new function in SASS来公开时间戳,可以按照以下步骤进行:
module Sass::Script::Functions
def timestamp()
return Sass::Script::String.new(Time.now.strftime("%Y%m%d%H%M"))
end
end
然后您可以按如下方式访问时间戳:
$cacheVersion = timestamp()
.someClass {
background-image: url('your/path/file.jpg?cacheversion='$cacheVersion);
}
编译时,会生成如下内容:
.someClass {
background-image: url('your/path/file.jpg?cacheversion=201510091349');
}
答案 1 :(得分:3)
使用@Amo的答案获得灵感,我最终使用的解决方案是mixin
,它使用unique_id()
函数生成随机值。这避免了必须定义自定义SASS
函数,所以它更简单,正如@Amelia指出的那样,也更清晰。
mixin
@mixin background-cache-bust($url) {
background-image: #{'url('} + $url + #{'?v='} + unique_id() + #{')'};
}
示例强>
.sprite {
@include background-cache-bust('/build/images/common/sprite.png');
}
<强>结果强>
.sprite {
background-image: "url(/build/images/common/sprite.png?v=u95ab40e0)";
}
答案 2 :(得分:0)
我正在使用gulp-sass和@AJReading mixin没有正确地连接字符串,编译为:
background-image: url(+ "$url" + ?v= + u2f58eec1 + );
以下是我的案例
<强>密新强>
@mixin background-cache-bust($url) {
background-image: unquote('url(' + $url + '?v=' + unique_id() + ')');
}