Assets und Styling

sitelo baut auf Vite auf, deshalb werden Frontend-JavaScript und -CSS automatisch kompiliert. Lege Skripte und Styles unter src/ ab (zum Beispiel src/js und src/css), verlinke sie im HTML mit wurzelrelativen URLs, und sitelo erledigt den Rest: TypeScript, CSS-Importe, Bundling und Minifizierung.

Projektstruktur

Seiten und Assets teilen sich src/. Ordner wie js/ und css/ sind Konventionen, keine Vorgaben — für sitelo zählt, was dein HTML referenziert, nicht wie die Ordner heißen.

my-site/
  src/
    index.ht.js          # Seite — gibt HTML zurück
    css/
      styles.css         # aus dem HTML verlinkt → gebündelt
    js/
      main.js            # aus dem HTML verlinkt → gebündelt
      counter.ts         # von main.js importiert → ebenfalls gebündelt
    lib/
      posts.js           # nur in data() verwendet → wird nie ausgeliefert
  public/
    favicon.ico          # unverändert kopiert

Assets aus dem HTML verlinken

Referenziere Dateien über wurzelrelative Pfade. Ein <script type="module"> oder ein <link rel="stylesheet"> ist das Signal an sitelo, diese Datei in den Build aufzunehmen:

import { html, head, title, link, script, body, h1, button } from 'javascript-to-html'

export default () =>
  html({ lang: 'de' },
    head(
      title('Meine Website'),
      link({ rel: 'stylesheet', href: '/css/styles.css' }),
      script({ type: 'module', src: '/js/main.js' }),
    ),
    body(
      h1('Hallo'),
      button({ id: 'count' }, '0'),
    ),
  )
import { createCounter } from './counter.ts'

const button = document.querySelector('#count')
const next = createCounter()

button.addEventListener('click', () => {
  button.textContent = String(next())
})
@import './tokens.css';

body {
  font-family: system-ui, sans-serif;
  margin: 0;
  padding: 2rem;
}

Was Vite kompiliert

Du brauchst PostCSS, Sass oder andere Vite-Plugins? Trage sie unter vite in sitelo.config.js ein.

Null JS von Haus aus

Prüfung fehlender Assets

Ein <script src> oder ein Stylesheet-href, das auf eine Datei zeigt, die weder in src/ noch in public/ existiert, lässt den Build fehlschlagen. Lieber nur eine Warnung?

export default {
  missingAssets: 'warn',
}