meeko compile
Comprueba un componente .meeko y lo compila a un módulo TypeScript con su render de servidor, su hidratación y sus tipos.
meeko compile traduce un componente .meeko al módulo TypeScript que ejecutan el servidor y el navegador: renderWithState y renderToString para el SSR, hydrate para el navegador, el CSS del componente y los tipos de sus props, eventos, modelos y snippets. Antes lo comprueba como meeko check con un componente; si hay errores, no escribe nada.
En una aplicación no hace falta: el plugin de Vite compila cada .meeko al importarlo. Sirve para ver qué genera el compilador, depurar un componente o integrarlo en un sistema de build que no es Vite.
Uso#
meeko compile app/components/Greeting.meeko Greeting.generated.tsGreeting.generated.tsTipo#
meeko compile <componente.meeko> <salida.ts>Parámetros#
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
<componente.meeko> |
ruta | obligatorio | El componente. Sus imports y sus autoimports se resuelven desde su carpeta y su proyecto. |
<salida.ts> |
ruta | obligatorio | El archivo que se escribe. Se sobrescribe si existe; su carpeta debe existir. |
Resultado#
Sin errores, escribe el módulo, imprime la ruta de salida tal como se pasó y termina con código 0. Con errores, imprime los diagnósticos, no escribe el archivo y termina con código 1.
// Greeting.generated.ts (extracto)
// Generated by Meeko. Edit the .meeko source instead.
import * as __meeko from "@meekojs/meeko/internal";
export type ComponentProps = { name: string };
export const css = "";
export function renderWithState(__inputProps: ComponentProps): { html: string; state: __meeko.HotState } {
// …
}El módulo importa @meekojs/meeko/internal, así que se ejecuta con el mismo @meekojs/meeko con el que se compiló. Sigue las opciones css.scopeAttribute y theme del meeko.config.ts del proyecto que contiene el componente.
Ejemplos#
Ver qué genera una directiva#
meeko compile app/components/Counter.meeko ../counter.tsComparar el módulo antes y después de un cambio muestra cómo el compilador traduce on:, if:when o each:of a enlaces directos con el DOM, sin DOM virtual.
Usar el módulo en un servidor propio#
// server.ts
import { renderWithState } from "./Greeting.generated.ts";
import { serializeJson } from "@meekojs/meeko";
const props = { name: "Ada" };
const { html, state } = renderWithState(props);
const page = `<div id="app">${html}</div><script type="application/json" id="data">${serializeJson({ props, state })}</script>`;El navegador debe hidratar con las mismas props; meeko init crea un proyecto completo con este esquema.
Errores comunes#
Un componente con errores#
<!-- app/components/Broken.meeko -->
<script lang="ts">
const n: number = "x";
</script>
<template><p>{n}</p></template>C:\proyectos\tienda\app\components\Broken.meeko:2:7 TS2322: Type 'string' is not assignable to type 'number'.El archivo de salida no se crea y el código es 1.
<!-- app/components/Broken.meeko -->
<script lang="ts">
const n: number = 1;
</script>
<template><p>{n}</p></template>Olvidar el archivo de salida#
meeko compile app/components/Greeting.meekoFalta el archivo de salida de compile, con el uso y código 1. La salida no va a stdout.
meeko compile app/components/Greeting.meeko Greeting.generated.tsUn componente suelto fuera de un proyecto#
# Card.meeko en una carpeta sin node_modules ni tsconfig.json
meeko compile Card.meeko Card.tsFalló la comprobación con TypeScript 7: error TS2688: Cannot find type definition file for 'node'. Sin un tsconfig.json, la comprobación previa usa opciones por defecto que incluyen los tipos de Node, y necesita @types/node (y @meekojs/meeko) instalados en el proyecto del componente.
# dentro de un proyecto con @meekojs/meeko y @types/node instalados
meeko compile app/components/Card.meeko Card.tsNotas#
- No es estable como formato. El módulo generado es interno: su forma puede cambiar entre versiones menores. Compila siempre con la misma versión con la que se ejecuta.
- Igual que Vite. El plugin de Vite usa el mismo compilador; lo que genera
meeko compilees lo que ejecutanmeeko devymeeko build, salvo el código de HMR y DevTools, que sólo existe en desarrollo. - Rendimiento. Compilar es rápido; lo que tarda es la comprobación previa con TypeScript.
- Windows y POSIX. Las rutas de entrada y salida admiten
\o/.