izolex / asset-macros
Asset makro s podporou SRI, nonce, HTTP2 server push a cache-busting pro Nette framework
Installs: 118
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/izolex/asset-macros
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.