2015-09-29 30 views
12

Jestem całkiem nowy w Laravel 5.0, ale nie w PHP. Bawiłem się z Elixirem, aby skompilować mój SASS, kopiować obrazy z mojego katalogu zasobów i uruchamiać je poprzez funkcję mix.version, aby zapobiec buforowaniu.Obrazy z pomijania pamięci podręcznej, które są połączone w plikach SASS

Działa to jednak świetnie na CSS, obrazy i JavaScript; czy możliwe jest posiadanie eliksirów z pamięci podręcznej obrazów połączonych z moim CSS/SASS? Z pewnością łatwo jest zmienić wersję obrazów, ale czy istnieje sposób na dostosowanie CSS do odzwierciedlenia nowych nazw plików?

Odkryłem: https://github.com/trentearl/gulp-css-url-adjuster , który umożliwia dołączenie parametru zapytania do ścieżek plików w pliku CSS, więc jest to połowa problemu rozwiązana. Byłbym bardzo szczęśliwy z tego, gdyby można było automatycznie zmienić parametr zapytania za każdym razem, gdy uruchamiał się.

Jakieś przemyślenia na temat tego, w jaki sposób można to osiągnąć, a może nawet jest to możliwe?

Powodem, dla którego chciałbym to zrobić, jest to, że ciągle rozwijam swoją aplikację i używam dużego arkusza sprite, który jest często rearanżowany, wymazywanie pamięci podręcznej jest wymogiem, i czy może być automatyczne, gdy przechodzimy przez przechwałki, co może zaoszczędzić mi dużo czasu i wysiłku.

Dzięki

Odpowiedz

2

Korzystanie z odpowiedzi m @Amo dla inspiracji, rozwiązanie, które w końcu wykorzystałem, to mixin, które wykorzystuje funkcję unique_id() do generowania losowej wartości. W ten sposób unika się konieczności definiowania niestandardowej funkcji, więc jest to prostsze i jak zauważyła @Amelia, nieco bardziej przejrzysta.

wstawka

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

Przykład

.sprite { 
    @include background-cache-bust('/build/images/common/sprite.png'); 
} 

Wynik

.sprite { 
    background-image: "url(/build/images/common/sprite.png?v=u95ab40e0)"; 
} 
+0

Lepiej byłoby zmienić ścieżkę niż użyć ciągu zapytania, a następnie przepisać ścieżkę na serwerze WWW. – Hades

+1

Jak mogłoby być lepiej? Przeglądarki i tak traktują parametry zapytania jako inny adres URL. Zmiana ścieżki i przepisanie za pośrednictwem serwera powoduje dodatkową warstwę komplikacji, której nie można osiągnąć tylko za pomocą Sass. – AJReading

+2

Metoda ciągów kwerendy nie jest najlepszą akceptowaną praktyką w przypadku pomijania pamięci podręcznej i może się nie powieść w pewnych okolicznościach. Niektóre przeglądarki nie widzą innego ciągu zapytania jako innego pliku, a niektóre programy (słyszałem: Squid) nie buforują plików z łańcuchem zapytań. Ponadto za pomocą metody ciągu kwerendy uniemożliwiasz serwerom WWW takim jak IIS wyświetlanie nagłówków ETag, które pozwalają przeglądarkom sprawdzać ważność pamięci podręcznej zamiast polegać wyłącznie na dacie/godzinach wygaśnięcia. – Hades

3

Jak używasz Sass, to można zdefiniować niestandardową zmienną w plikach Sass, które mogłyby być wykorzystane do pomijania pamięci podręcznej, a następnie dołączyć do tej zmiennej żadnej ścieżki URL obrazu.

Zmienna musi tylko zawierać odniesienie do bieżącego znacznika czasu.

Aby to zrobić, musisz create a new function in SASS aby odsłonić znacznik czasu, który można zrobić w następujący sposób:

module Sass::Script::Functions 
    def timestamp() 
     return Sass::Script::String.new(Time.now.strftime("%Y%m%d%H%M")) 
    end 
end 

Następnie można uzyskać dostęp do datownika, co następuje:

$cacheVersion = timestamp() 

.someClass { 
    background-image: url('your/path/file.jpg?cacheversion='$cacheVersion); 
} 

When skompilowany, będzie produkować coś takiego:

.someClass { 
    background-image: url('your/path/file.jpg?cacheversion=201510091349'); 
} 
+2

chyba lepiej zrobić mixin tutaj i powrót podany link jako 'url ($ link? v = $ timestamp)' – Amelia

+0

To jest naprawdę dobry pomysł. Podchodzę do tego jako problem do rozwiązania z 'elixir' lub' gulp', ale w rzeczywistości dodanie znacznika czasu oznaczałoby, że zmienia się za każdym razem, gdy SASS jest kompilowany (co zdarzyłoby się dużo podczas tworzenia), ale nie miałoby znaczenia po wprowadzeniu najnowszych zmian w ich środowisku. – AJReading

0

mi stosując łykiem-Sass i @AJRead ing wstawek nie concantenate ciąg poprawnie, który kompiluje do:

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

Oto, co działa w moim przypadku

mixin

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