CDN & bundles
Chaque package runtime de Fluixi fournit un build global IIFE autonome que vous pouvez
déposer dans une page avec un seul <script>, sans bundler, sans étape de build, sans
installation npm. Ils sont publiés à chaque release et servis depuis
unpkg et jsDelivr.
Tailles des bundles
Chaque global est entièrement autonome (ses dépendances sont incluses), vous ne chargez donc
qu'un seul fichier. Les tailles sont minifiées ; le gzip est ce qui transite sur le réseau.
| Script | Global | Contenu | Taille |
|---|---|---|---|
@fluixi/reactive/dist/cdn/signal.global.js |
window.Signal |
Le cœur TC39-Signals brut (State, Computed, subtle) |
3.3 Ko (1.3 Ko gz) |
@fluixi/reactive/dist/cdn/reactive.global.js |
window.Fluixi |
API réactive complète (signals, memos, effects, stores, resources) | 40.8 Ko (12.2 Ko gz) |
@fluixi/dom/dist/cdn/dom.global.js |
window.FluixiDOM |
Runtime DOM (render, contrôle de flux) + l'API réactive | 58.1 Ko (18.9 Ko gz) |
@fluixi/core/dist/cdn/core.global.js |
window.Fluixi |
Tout le framework (réactivité + composants + contrôle de flux + router + startClient) |
78.5 Ko (25.9 Ko gz) |
@fluixi/template-runtime/dist/cdn/fluixi.global.js |
window.Fluixi |
Le framework + le compilateur de templates, pour que html `` fonctionne dans la page |
103.3 Ko (32.9 Ko gz) |
Choisissez le plus petit qui couvre votre besoin : juste la réactivité → signal ou reactive ;
une UI réactive → dom ; le framework applicatif complet → core.
Réactivité seule, window.Signal
L'option la plus légère : les primitives Signals de la spécification, rien d'autre.
<script src="https://unpkg.com/@fluixi/reactive/dist/cdn/signal.global.js"></script>
<script>
const count = new Signal.State(0);
const doubled = new Signal.Computed(() => count.get() * 2);
const w = new Signal.subtle.Watcher(() => {
queueMicrotask(() => { console.log('doubled =', doubled.get()); w.watch(); });
});
w.watch(doubled);
count.set(5); // → doubled = 10
</script>
L'API réactive, window.Fluixi
La surface ergonomique createSignal/createMemo/createEffect/createStore, sur le même cœur :
<script src="https://unpkg.com/@fluixi/reactive/dist/cdn/reactive.global.js"></script>
<script>
const { createSignal, createMemo, createEffect } = Fluixi;
const [count, setCount] = createSignal(0);
const doubled = createMemo(() => count() * 2);
createEffect(() => console.log('doubled =', doubled()));
setCount(5); // → doubled = 10
</script>
Une UI réactive, window.FluixiDOM
Le runtime DOM plus l'API réactive, pour qu'un seul script construise une interface vivante. Il ré-exporte les primitives réactives (le dom ne les inclut plus lui-même), donc pas besoin d'un second fichier.
<div id="app"></div>
<script src="https://unpkg.com/@fluixi/dom/dist/cdn/dom.global.js"></script>
<script>
const { render, createNativeElement, insert, signal } = FluixiDOM;
function Counter() {
const n = signal(0);
const button = createNativeElement('button');
button.addEventListener('click', () => n.set(n() + 1));
insert(button, () => `compteur : ${n()}`);
return button;
}
render(() => Counter(), document.getElementById('app'));
</script>
Comme il n'y a pas de compilateur dans une page en <script> simple, écrivez le balisage avec le
tag html `` (templates à l'exécution) plutôt qu'en JSX.
Tout le framework, window.Fluixi
core.global.js inclut tout, réactivité, composants, contrôle de flux, le router, et
startClient. À utiliser quand vous voulez le framework complet sans build :
<div id="app"></div>
<script src="https://unpkg.com/@fluixi/core/dist/cdn/core.global.js"></script>
<script>
const { render, insert, createSignal } = Fluixi;
function Counter() {
const [n, setN] = createSignal(0);
const button = document.createElement('button');
button.addEventListener('click', () => setN(n() + 1));
insert(button, () => `compteur : ${n()}`);
return button;
}
render(() => Counter(), document.getElementById('app'));
</script>
reactive.global.jsetcore.global.jsexposent tous deuxwindow.Fluixi, chargez l'un des deux, pas les deux.signal.global.jsutilisewindow.Signalet peut coexister avec l'un ou l'autre.
Imports nus, @fluixi/cdn
L’utilisation d’un objet global pose un seul objet sur window, et reactive, core et fluixi revendiquent le même nom, donc un seul peut être chargé. Avec une carte, la page écrit les mêmes import qu’une application compilée, et ne charge que les sous-chemins qu’elle touche. Un navigateur ne résout un spécificateur nu que par une carte et ne lit jamais package.json, donc chaque sous-chemin transitif doit y figurer ; @fluixi/cdn est cette liste, générée à chaque version et épinglée sur elle.
min(15 entrées,core,dom,utilset le graphe derrière)templates(3 entrées, pour compiler `html`` dans la page)full(19, tout ce qu’un navigateur peut utiliser)
Chacune existe en .json à lire ou coller et en .js à charger. Le .js installe la carte et doit venir avant le premier script de module, parce qu’une carte ajoutée après qu’un module a commencé à charger est ignorée.
<div id="app"></div>
<script src="https://unpkg.com/@fluixi/cdn/dist/min.js"></script>
<script type="module">
import { render, signal, effect } from '@fluixi/core';
function Counter() {
const n = signal(0);
const button = document.createElement('button');
button.addEventListener('click', () => n.set(n() + 1));
effect(() => { button.textContent = `count: ${n()}`; });
return button;
}
render(() => Counter(), document.getElementById('app'));
</script>
html`` exige le runtime de templates ; le htmlréexporté par@fluixi/core` est la balise que le compilateur remplace à la construction ; l’appeler dans la page lève une erreur.
<div id="app"></div>
<script src="https://unpkg.com/@fluixi/cdn/dist/full.js"></script>
<script type="module">
import { render, signal } from '@fluixi/core';
import { html } from '@fluixi/template-runtime';
function Counter() {
const n = signal(0);
return html`<button @click=${() => n.set(n() + 1)}>count: ${n}</button>`;
}
render(() => Counter(), document.getElementById('app'));
</script>
Le .json reste pour une page qui préfère porter la carte dans son propre balisage ; plusieurs cartes dans une page demandent Chromium 133 ou plus récent, d’où full en un seul fichier. @fluixi-ui/cdn fait la même chose pour la bibliothèque de composants et se compose avec celles-ci.
Épinglage de version
unpkg.com/@fluixi/core@1/... suit la version majeure ; épinglez une version exacte pour la
reproductibilité, par ex. unpkg.com/@fluixi/[email protected]/dist/cdn/core.global.js.
jsDelivr fonctionne pareil : cdn.jsdelivr.net/npm/@fluixi/core/dist/cdn/core.global.js.
Pour de vraies applications, préférez le chemin compilé (npm create fluixi) : le compilateur
produit une sortie plus petite et tree-shakée que n'importe quel bundle global. Les builds CDN
sont pour les démos, prototypes, CodePen/JSFiddle, et l'ajout de réactivité à une page existante.