Latte SFC – Single File Components
- evromalarkey
- Nette Blogger | 20
Hraju si s myšlenkou zda by v Latte bylo možné použít SFC jako např. ve Vue, Svelte nebo Astru.
Dneska když už lze načítat javascript pomocí esm a importmap https://caniuse.com/import-maps, a css lze psát strukturovaně a zanořovat https://caniuse.com/css-nesting, tak vlastně není skoro potřeba žádný bundler.
Obrovskou výhodu v SFC má https://astro.build, a stránky tvořené přes tento
framework jsou neuvěřitelně rychlé a dosahují nejlepšího skóre
v PageSpeed. Právě proto že js a css se generuje u jednotlivých SFC
komponent do <head>
a na stránce jsou vykreslené pouze css
a js komponent z té stránky.
Něco podobného by šlo aplikovat i v latte, a umožnilo by to např. takto
<style>
.s-example {
.s_body {
color: red;
}
}
</style>
<script type="module">
import { Stimulus, Controller } from '/js/stimulus.js'
Stimulus.register('s-section', class extends Controller {
connect() {
console.log('connected')
}
})
</script>
<div class="s-section" data-controller="s-section">
<div class="s_body"></div>
</div>
/js/stimulus.js
import { Application, Controller } from 'https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3.2.2/+esm'
const Stimulus = new Application(document.documentElement)
Stimulus.start()
export { Stimulus, Controller }
Nevýhodu to má v tom že pokud je na stránce víc stejných komponent tak
by se <style>
a <script>
duplikoval, což
nechceme. Ideální by bylo aby se obojí injectovalo do
<head>
a bez duplicit. Napadlo mě to dělat přes
n:block
, ale to se mi nepodařilo takto použít aby to fungovalo
takto komponentově. Takže nemám ponětí jak něčeho podobného v latte
dosáhnout.
Každopádně kdyby tohle bylo v latte možné tak by to byl super způsob
jak psát moderní js a css komponentově a docílit tak mnohem lepší
rychlosti rendrování stránek na frontendu podobně jako Astro. Např. dát na
style n:asset
který by unikátně vykreslil tag v
<head>
.
Co si o tom myslíte?
Editoval evromalarkey (21. 9. 2023 14:17)