izolex / asset-macros
Asset makro s podporou SRI, nonce, HTTP2 server push a cache-busting pro Nette framework
Requires
- php: >= 7.1
- latte/latte: ^2.4
- nette/application: ^2.4
- nette/di: ^2.4
- nette/http: ^2.4
- nette/utils: ^2.4
README
n:asset
makro Ti pomůže s CPS.
Umí počítat subresource integrity
a přidá nonce,
abys nemusel zapisovat n:nonce
. Pokud budeš chtít, assety Ti přidá do Link
hlavičky pro HTTP2 Server Push.
Navíc Ti pomůže s lámáním prohlížečové cache a to buď názvem souboru nebo přidáním query string.
Instalace (minimální konfigurace)
extension:
assetMacros: \Izolex\AssetMacros\DI\Extension
Konfigurace
assetMacros:
push.on: true
version.on: true
sri.on: true
wwwDir: %wwwDir%
version:
extensions:
- css
- js
- ico
mode: query
type: mtime
cleanDist: true
sri:
hash: sha256
crossorigin: anonymous
push:
rel: preload
V úkazce je použito výchozí nastavení. Není tedy nutné přidávat konfiguraci do configu. V kombinaci version.on: true
a version.mode: fileName
se budou soubory ukládat do stejného adresáře. S version.cleanDist: true
se budou staré
soubory automaticky mazat.
sri.hash
může být pouze sha256
, sha384
, sha512
.
version.mode
může být pouze fileName
, query
.
version.type
může být pouze mtime
, md5
.
push.rel
může být pouze preload
, prefetch
.
Použítí
<link n:asset="{$basePath}/css/main.css">
<script n:asset="/js/main.js"></script>
<img n:asset="/img/image.png">
Výsledné HTML:
<link href="/css/main.css" rel="stylesheet" integrity="sha256-..." crossorigin="anonymous" nonce="...">
<script src="/js/main.js" integrity="sha256-..." crossorigin="anonymous" nonce="..."></script>
<img src="/img/image.png">
s version.on: true
a version.mode: fileName
např.:
<link href="/css/main.1537267324.css" rel="stylesheet" integrity="sha256-..." crossorigin="anonymous" nonce="...">
Hlavička Link:
Link: </css/main.css>; rel=preload; as=style, </js/main.js>; rel=preload; as=script, </img/image.png>; rel=preload; as=image
Pokud budeš vkládat CSS styly, makro Ti automaticky doplní rel="stylesheet"
atribut.
Bin
Pro smazání souborů vygenerovaných pro cache-busting (např.: /css/main.1537267324.css) lze použít bin.
Mazání probíhá rekurzivně regulárním výrazem #.*\.([0-9]{10}|[a-f0-9]{32})\.[a-z]+$#i
.
Je tedy nutné pohlídat si názvy souborů.
např.: $ php ./vendor/bin/assetMacros -cd=./www/assets
(nebo --clean-dist=./www/assets
).
Výsledná cesta k dist adresáři se bere vůči současnému pwd (pracovnímu adresáři).
Před smazáním se vypíše seznam souborů pro smazání, který je nutný potvrdit (y/n). Pro smazání bez dotazu stačí přidat argument -q
(nebo --quiet
)
Lze vytvořit zkratku do composer scripts (pouze s -q
). Např.:
"scripts": {
"assets": "@php ./vendor/bin/assetMacros -cd=./www/assets -q"
}
A následně spouštět skrze $ composer assets
.
Omezení
Do cest k souborům nelze vkládat jiné proměnné než $basePath
, $baseUrl
, $baseUri
.
$baseUrl
a $baseUri
se překládají na $basePath
, tudíž ve výsledné cestě bude relativní URL.
Při použití Subresource integrity je nutné při každé změně asset souboru promazat latte cache.
Zároveň je nutné generovat latte šablony skrze prohlížeč, kvůli URL. Podpora přes CLI možná v budoucnu.