Ir al contenido

Instalación

Ventana de terminal
npm install wu-framework

Esa es toda la instalación. Wu tiene cero dependencias en tiempo de ejecución: no arrastra nada de forma transitiva y no necesitas ningún framework para usarlo.

El paquete incluye tres bundles más un conjunto de exports por subruta.

Entrada Formato Tamaño Usado por
wu-framework ESM ~120 KB Bundlers, <script type="module">
wu-framework (require) CJS ~120 KB Node, cadenas de herramientas antiguas
dist/wu-framework.umd.js UMD ~240 KB Una etiqueta <script> normal, sin build

El build UMD es más grande porque no puede cargar chunks de forma asíncrona: todo lo que en el build ESM es un chunk perezoso aquí va incrustado.

Algunos subsistemas no están en las cifras anteriores porque se cargan bajo demanda:

Chunk Se carga cuando Tamaño
Capa de IA primer acceso a wu.ai.* ~71 KB
Sandbox de iframe primera app con sandbox: 'strict' o 'eval' pequeño
Parser de HTML primera app con sandbox: 'eval' pequeño
Grabador del timeline primera llamada a wu.timeline.* pequeño
Sincronización CRDT del store primera llamada a wu.store.sync() pequeño

Si solo usas el sandbox module por defecto y nada de IA, pagas el bundle del core y nada más.

Con bundler (Vite, webpack, esbuild, Rollup)

Sección titulada «Con bundler (Vite, webpack, esbuild, Rollup)»
import { wu } from 'wu-framework';
await wu.init({ apps: [{ name: 'cart', url: 'http://localhost:5173' }] });

También existen exports de funciones con nombre, si los prefieres al singleton:

import { init, mount, unmount, emit, on, provide, consume } from 'wu-framework';
<script src="https://unpkg.com/wu-framework/dist/wu-framework.umd.js"></script>
<script>
window.wu.init({ apps: [{ name: 'cart', url: '/apps/cart' }] });
</script>

El build UMD asigna window.wu, que es también lo que buscan las micro-apps cuando llaman a wu.define().

Cada adaptador tiene su propia subruta, así que solo cargas el que usas:

import { wuReact } from 'wu-framework/adapters/react';
import { wuVue } from 'wu-framework/adapters/vue';
import { wuSvelte } from 'wu-framework/adapters/svelte';

Disponibles: react, vue, angular, svelte, preact, solid, lit, vanilla, alpine, qwik, stencil, htmx, stimulus. Mira Resumen de adaptadores.

El adaptador no incluye su framework en el bundle: detecta React (o Vue, …) desde window o lo importa dinámicamente desde las dependencias de tu propia app. Tu micro-app instala su framework como siempre.

import { renderApp, renderApps, renderStateScript } from 'wu-framework/server';

Se ejecuta en Node a secas: sin vm, sin --experimental-vm-modules. Mira Resumen de SSR.

Ventana de terminal
npm install @wu-framework/astro # Astro
npm install @wu-framework/next # Next.js

Ambas son accesibles también a través del paquete principal como wu-framework/integrations/astro y wu-framework/integrations/next. Mira Astro y Next.js.

El objetivo de browserslist es defaults, not IE 11, supports es6-module. En concreto, Wu requiere:

  • Módulos ES e import() dinámico
  • Shadow DOM (attachShadow) — el modelo de aislamiento depende de él
  • Proxy — lo usa el rastreador de efectos secundarios en modo module

Dos funcionalidades se degradan en lugar de romperse:

  • Declarative Shadow DOM (Chrome 111+, Safari 16.4+, Firefox 123+) solo hace falta para SSR. Los navegadores antiguos pueden usar el declarativeShadowDomPolyfill() incluido, y mount() materializa por su cuenta cualquier <template shadowrootmode> que quede pendiente.
  • WebCrypto es lo preferido para generar los tokens de autorización del bus de eventos. Fuera de un contexto seguro, Wu recurre a crypto.getRandomValues antes de llegar siquiera a Math.random().

Si attachShadow lanza un error, Wu crea un sandbox de respaldo: un <div> normal con isolation: isolate; contain: layout style paint. La app sigue funcionando, pero la encapsulación de CSS desaparece. Trátalo como un fallo de tu entorno, no como un modo soportado.

import { wu } from 'wu-framework';
console.log(wu.version); // '2.7.2'
console.log(wu.info()); // resumen de capacidades

Una vez montadas las apps, wu.inspect() devuelve una instantánea de diagnóstico completa: apps registradas, estado de montaje, modos de sandbox realmente en uso, capacidades vivas, eventos recientes y el store. Es la forma más rápida de confirmar que el runtime está conectado como crees.

Construye tu primera micro-app.