Подтвердить что ты не робот

Изображения, связанные с кэшем, которые связаны внутри файлов SASS

Я новичок в 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, что спаси меня много времени и усилий.

Спасибо

4b9b3361

Ответ 1

Используя ответ от @Amo для вдохновения, решение, которое я закончил, было mixin, которое использует функцию unique_id() для генерации случайного значения. Это позволяет избежать создания пользовательской функции SASS, поэтому она проще и, как указывает @Amelia, тоже немного чище.

Микширование

@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

Как вы используете SASS, можно определить пользовательскую переменную в ваших SASS файлах, которые могут быть использованы для перебора кеша, а затем добавить эту переменную к любым URL-адресам URL-адреса.

Переменная просто должна содержать ссылку на текущую временную метку.

Для этого вам нужно создать новую функцию в 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');
}

Ответ 3

Я использую gulp -sass и @AJReading mixin не связывает строку правильно, которая компилируется в:

background-image: url(+ "$url" + ?v= + u2f58eec1 + );

Вот что работает в моем случае

Mixin

@mixin background-cache-bust($url) {
   background-image: unquote('url(' + $url + '?v=' + unique_id() + ')');
}