Intégration Qwik
Qwik est un framework repris qui ne fournit pratiquement aucun JavaScript lors de la première peinture – les composants s'hydratent paresseusement, lors de l'interaction. qwik-bext est l'adaptateur Qwik City qui cible bext : vous conservez l'expérience de création de Qwik, et bext fournit la couche HTTP, le cache, le WAF, HTTP/2/3 et l'écosystème de plugins que chaque adaptateur réinvente autrement.
Version préliminaire. L'adaptateur et le framework côté Rust exécution dans le navire
crates/bext-framework-qwikdans le cadre de l'E7 de bext jalon. Voir le feuille de route de l'écosystème pour ce qui a atterri et ce qui est encore sur la liste de suivi.
Installer#
bun add -d qwik-bext
Dépendances homologues : @builder.io/qwik-city ^1.
Configurer#
Dans vite.config.ts :
import { defineConfig } from "vite";
import { qwikVite } from "@builder.io/qwik/optimizer";
import { qwikCity } from "@builder.io/qwik-city/vite";
import bext from "qwik-bext";
export default defineConfig({
plugins: [
qwikCity(),
qwikVite(),
bext({
outDir: "dist",
runtime: "bun",
}),
],
});
qwik-bext renvoie un plugin Vite qui s'exécute sur closeBundle, écrivant un manifeste bext-adapter.json à côté de la propre sortie de build de Qwik afin que crates/bext-framework-qwik puisse le récupérer.
Possibilités#
| Option | Taper | Défaut | Description |
|---|---|---|---|
outDir |
string |
"dist" |
Répertoire de sortie relatif à la racine du projet. |
ssr |
string |
"server/entry.ssr.mjs" |
Entrée SSR relative à outDir. |
runtime |
"node" | "bun" |
"bun" |
Temps d'exécution préféré pour le travailleur SSR. Informatif. |
staticGenerate |
boolean |
false |
Exécutez le pass de génération statique de Qwik City pendant la construction. |
Construire#
bun run build
La build émet :
dist/
build/ hashed client assets (JS, CSS, fonts)
static/ optional prerendered HTML
server/
entry.ssr.mjs SSR entry — exports default { render }
q-manifest.json Qwik manifest with symbol → chunk map
bext-adapter.json metadata for the bext runtime
bext-adapter.json est le contrat entre qwik-bext et
crates/bext-framework-qwik. Cela ressemble à :
{
"adapter": "qwik-bext",
"version": "0.1.0-preview",
"runtime": "bun",
"serverEntry": "server/entry.ssr.mjs",
"clientDir": "build",
"staticDir": "static",
"manifest": "q-manifest.json",
"generatedAt": "2026-04-11T12:00:00.000Z"
}
Servir#
Via bext.config.toml#
[framework]
type = "qwik"
build_dir = "dist"
[build]
script = "dist/server/entry.ssr.mjs"
watch_dirs = ["src"]
live_reload = true
Alors:
bext serve
Le vhost de bext détecte le projet comme étant Qwik (sur qwik.config.* ou
vite.config.* + @builder.io/qwik-city dans package.json ), lit la sortie de build et distribue les requêtes au gestionnaire Qwik via l'adaptateur d'exécution du framework.
Via bext new#
bext new my-qwik-app --template @bext/starter-qwik
cd my-qwik-app
bun install
bun run build
bext serve
Le démarreur est livré avec vite.config.ts, un layout.tsx partagé, deux pages ( / et /about ) et la plomberie bext.config.toml pré-câblée.
Comment ça s'articule#
Trois pièces mobiles collaborent sur chaque demande Qwik via bext :
qwik-bext(ce package) — Plugin Vite qui se connecte à Qwik Pipeline de construction de la ville. S'exécute au moment de la construction. Produitdist/etbext-adapter.json.crates/bext-framework-qwik— RouilleFrameworkAdaptermise en œuvre. S'exécute au moment de la configuration du serveur. Détecte le projet, appellebunx qwik build(ounpx qwik build), normalise la sortie et vend un adaptateur d'exécution.bext-servervhost — par demande. Acheminer les demandes entrantes à l'adaptateur d'exécution Qwik, qui à son tour est distribué au sous-processus Node / Bun exécutantdist/server/entry.ssr.mjs.
Comment cela se compare-t-il à @builder.io/qwik-city/adapters/node#
L'adaptateur node de Qwik City produit un serveur Node autonome que vous exécutez vous-même. qwik-bext ignore la couche HTTP — bext le fournit — et émet simplement l'entrée SSR compilée ainsi que les actifs client hachés. bext ajoute ensuite TLS, HTTP/2/3, le cache, WAF, la compression et l'écosystème complet de plugins sans que Qwik n'ait besoin d'en connaître aucun.
Si vous exécutez actuellement adapter-node derrière nginx, qwik-bext remplace les deux couches en un seul mouvement - et la possibilité de reprise de Qwik maintient les octets de connexion à un niveau bas avant même que le cache de bext n'intervienne.
Ce qui fonctionne aujourd'hui#
- Routage du système de fichiers (
src/routes/**) - Mises en page imbriquées (
layout.tsx) - Chargeurs de route (
routeLoader$) - Actions de formulaire (
routeAction$) - Itinéraires dynamiques (
[param],[...rest]) - Passe de génération statique (facultatif, via
staticGenerate: true) - Actifs statiques servis à partir de
dist/build/ - TypeScript + Qwik 1.x
L'adaptateur E7 est un aperçu : la répartition par demande n'est pas encore câblée. Si vous avez besoin de trafic de production aujourd'hui, utilisez @builder.io/qwik-city/adapters/node derrière bext comme proxy inverse (voir multi-application ) pendant que le suivi arrive.
Limites actuelles#
- L'envoi du sous-processus est toujours TODO. Pour l'aperçu E7, le
l'adaptateur d'exécution est uniquement un descripteur -
bext-framework-qwikhandle_requestrenvoie une erreur non encore câblée. Le suivi consiste à apprendre au vhost du serveur bext à envoyer au sous-processus Node / Bun qui importedist/server/entry.ssr.mjs, en réutilisant la même plomberie de sous-processus que bext a déjà pour PHP / FastCGI. - Aucune réponse en streaming pour l’instant. Le
renderToStreamde Qwik est un véritable API de diffusion en continu. L'aperçu met sa sortie en mémoire tampon. Le faire passer par le rédacteur de réponses de bext atterrit avec le streaming CrochetFrameworkAdapter::render. - Aucune prise en charge du runtime Edge. Cet adaptateur cible Node / Bun. Cloudflare -La sortie Edge de type Workers est hors de portée pour E7.
- Assistant
viteAdapterpartagé non encore utilisé. Nous écrivonsbext-adapter.jsondirectement depuis un plugin plutôt que de passer par@builder.io/qwik-city/adapters/shared/vite. Une fois que nous serons à l’aise avec le peer-dep direct, nous migrerons. - Aucune version native de Rust.
qwik-bextdébourse pourqwik build— La version de Qwik est un ensemble de plugins Vite et sa réécriture dans Rust est hors de portée pour l'E7. Un pipeline direct turbopack / chignon figure sur la feuille de route de l'écosystème.
Dépannage#
qwik build produced no dist/ directory— la build s'est exécutée mais n'a pas émis la mise en page attendue. Vérifiez à nouveau quevite.config.tsinclut les pluginsqwikCity()etqwikVite()aux côtés debext(), etqwik-bextest installé en tant que dépendance de développement.QwikRuntime::handle_request is not wired yet— vous êtes voir la limitation du descripteur E7 uniquement. La construction fonctionne, la détection fonctionne, mais l'envoi par demande est prévu pour le suivi. En attendant, utilisez@builder.io/qwik-city/adapters/nodederrière bext comme proxy inverse si vous avez besoin de trafic de production maintenant.- Incompatibilité de dépendance avec Qwik City v0 —
peerDependenciesest défini sur"@builder.io/qwik-city": "^1". Si votre fichier de verrouillage code v0, le contrat de l'adaptateur ne sera pas résolu : mettez à niveau Qwik City ou utilisez un adaptateur plus ancien.
Documents associés#
@bext/starter-qwik— échafaudage de démarrage- Présentation du cadre bext — comment les adaptateurs composer avec le pipeline de requêtes de bext
- SvelteKit sur bext — un autre
Implémentation
FrameworkAdapteravec la même forme en trois parties
Links#
- Qwik — Documentation officielle de la ville Qwik et Qwik