Saltar al contenido
Meeko
Escribe para buscar en las guías y en la referencia de la API. Ábrela desde cualquier página con / o Ctrl K; muévete con las flechas y entra con Intro.
Empezar

Contenidos

En esta página

defineMeekoConfig

Declara la configuración de meeko.config.ts con sus tipos (layers, módulos, autoimports, aliases, servidor, CSS, documento, sitemap y tema) sin cambiarla.

macro Desde 1.0.0 @meekojs/meeko/framework Código fuente
ts
import { defineMeekoConfig } from "@meekojs/meeko/framework";

defineMeekoConfig(config) declara la configuración del proyecto en meeko.config.ts. En ejecución devuelve el mismo objeto; su papel es dar tipos, completado y documentación a cada clave y conservar los literales (const T), para que server.adapter siga discriminado y las opciones de cada adaptador se comprueben. Desde 1.8 también tipa y documenta la clave de cada módulo de modules sin importar nada (véase modules).

meeko dev, meeko build, meeko check, el plugin de Vite y el servidor de lenguaje leen el export por defecto de meeko.config.ts. Cada clave tiene su página en el grupo «Configuración» de esta referencia.

Uso#

ts
// meeko.config.ts
import { defineMeekoConfig } from "@meekojs/meeko/framework";

export default defineMeekoConfig({
  server: { adapter: "node", port: 4173 },
  site: "https://example.com",
  sitemap: true,
  theme: true,
});

Tipo#

ts
function defineMeekoConfig<const T extends MeekoConfig>(config: T & MeekoConfig): T

MeekoConfig

ts
interface MeekoConfig {
	readonly viewTransitions?: boolean
	readonly components?: {
		readonly dirs?: readonly {
			readonly path: string
			readonly prefix?: string
		}[]
	}
	readonly layers?: readonly string[]
	readonly extends?: readonly string[]
	readonly modules?: readonly MeekoModuleEntry[]
	readonly imports?: {
		readonly appDirs?: readonly string[]
		readonly sharedDirs?: readonly string[]
		readonly serverDirs?: readonly string[]
	}
	readonly alias?: Readonly<Record<string, string | false>>
	readonly server?: MeekoServerConfig
	readonly css?: { readonly scopeAttribute?: 'all' | 'matched' }
	readonly document?: DocumentConfig
	readonly dev?: {
		readonly serverLogs?: boolean
	}
	readonly devtools?: boolean | MeekoDevtoolsConfig
	readonly site?: string
	readonly sitemap?: boolean | SitemapConfig
	readonly robots?: boolean | RobotsConfig
	readonly theme?: boolean | ThemeConfig
}

Parámetros#

Clave Tipo Por defecto Descripción
layers string[] [] Carpetas o paquetes que aportan páginas, componentes, layouts y autoimports.
extends string[] [] Alias obsoleto de layers.
modules nombres de paquete o rutas [] Módulos de Meeko (defineMeekoModule), por su nombre; sus opciones van en su clave.
imports { appDirs?, sharedDirs?, serverDirs? } las carpetas estándar Carpetas extra de autoimports por ámbito.
alias Record<string, string | false> ninguno Aliases de ruta propios, además de ~/, @/, #shared/ y #server/.
server { adapter, … } { adapter: "node" } El adaptador ("node", "bun", "deno", "cloudflare" o "static") y sus opciones: host, port, contentSecurityPolicy, headers… adapter es obligatorio si declaras server.
css { scopeAttribute?: "all" | "matched" } "all" Qué elementos reciben el atributo de <style scoped>.
document DocumentConfig ninguno <head>, lang y atributos del documento de toda la aplicación.
dev { serverLogs? } ninguno Opciones de meeko dev.
devtools boolean o { panel?, position? } false Desde 1.8, meeko dev monta el panel de Meeko DevTools en la página.
site URL MEEKO_PUBLIC_ORIGIN Origen público, para el sitemap y las URL absolutas.
sitemap / robots boolean u opciones false Escriben sitemap.xml y robots.txt en el build.
theme boolean u opciones false Tema claro/oscuro sin parpadeo y <MeekoThemeToggle>.

Cada módulo de modules añade su propia clave (su meta.configKey), con sus opciones: i18n para @meekojs/i18n, ui para @meekojs/ui. Meeko la tipa con .meeko/types/config.d.ts, que generan meeko dev, meeko check y el editor de un workspace de confianza; meeko check comprueba meeko.config.ts con esos tipos desde 1.8.

Valor devuelto#

El mismo objeto, con su tipo literal. Cambiar meeko.config.ts exige reiniciar meeko dev.

Ejemplos#

Layers, módulos y autoimports#

ts
// meeko.config.ts
import { defineMeekoConfig } from "@meekojs/meeko/framework";

export default defineMeekoConfig({
  layers: ["./layers/base"],
  modules: ["@acme/seo", "./modules/accent"],
  accent: { initial: "teal" },
  imports: {
    appDirs: ["app/services"],
    sharedDirs: ["shared/validators"],
    serverDirs: ["server/services", "server/repositories"],
  },
  alias: { "#emails": "./server/emails" },
});

Un sitio estático con CSP#

ts
// meeko.config.ts
import { defineMeekoConfig } from "@meekojs/meeko/framework";

export default defineMeekoConfig({
  server: {
    adapter: "static",
    contentSecurityPolicy: { "default-src": ["'self'"], "img-src": ["'self'", "data:"] },
  },
  site: "https://docs.example.com",
  sitemap: { exclude: ["/borradores/*"] },
  robots: { disallow: ["/borradores/"] },
});

Cloudflare Workers#

ts
// meeko.config.ts
import { defineMeekoConfig } from "@meekojs/meeko/framework";

export default defineMeekoConfig({
  server: { adapter: "cloudflare" },
  css: { scopeAttribute: "matched" },
  document: { lang: "es" },
});

Errores comunes#

server sin adapter#

Incorrectots
export default defineMeekoConfig({ server: { port: 3000 } });

meeko check da TS2322: Type '{ port: number; }' is not assignable to type 'MeekoServerConfig | undefined'. con Property 'adapter' is missing, y la carga de la configuración falla con meeko.config.ts: server.adapter debe ser "node", "cloudflare", "deno", "bun" o "static".

Correctots
export default defineMeekoConfig({ server: { adapter: "node", port: 3000 } });

Un adaptador que no existe#

Incorrectots
export default defineMeekoConfig({ server: { adapter: "vercel" } });

meeko check da TS2322: Type '"vercel"' is not assignable to type '"bun" | "cloudflare" | "deno" | "node" | "static"'. y la misma parada al cargar la configuración.

Correctots
export default defineMeekoConfig({ server: { adapter: "node" } });

Una clave mal escrita#

defineMeekoConfig acepta claves que no conoce, porque los módulos añaden las suyas (meta.configKey), también sin aumentar MeekoConfig: rechazarlas en los tipos rompería configuraciones válidas de 1.x. La opción mal escrita se ignora, y desde 1.7 la carga de los módulos (meeko dev, meeko build, meeko check) lo avisa con la clave más parecida; desde 1.8, la clave de un módulo instalado que falta en modules es el aviso MEEK127, que nombra la entrada que falta: [meeko] Aviso: meeko.config.ts tiene la clave desconocida "sitmap", que Meeko ignora. ¿Quisiste decir "sitemap"?. Hasta 1.6 no había ningún aviso.

Incorrectots
export default defineMeekoConfig({ sitmap: true });
Correctots
export default defineMeekoConfig({ site: "https://example.com", sitemap: true });

Notas#

  • Dónde se ejecuta. En Node, al cargar la configuración: nunca en el navegador ni en el servidor de producción, que recibe sólo lo que el build escribe en el manifiesto. No importes código de la aplicación en meeko.config.ts.
  • Variables de entorno. meeko dev, build, start, preview y check leen el .env del proyecto antes de cargar la configuración; MEEKO_PORT y MEEKO_HOST sustituyen a server.port y server.host.
  • Secretos. La configuración acaba en el build: los secretos se leen en el servidor, en server/runtime.ts, no aquí.
  • Sitemap. Las URL de sitemap.xml son absolutas: con sitemap y sin site ni MEEKO_PUBLIC_ORIGIN, meeko build se detiene antes de compilar. meeko check no lo comprueba.
  • Sin defineMeekoConfig. Un objeto exportado sin ella también se carga, pero sin tipos ni completado.

Relacionado#

¿Te sirvió esta página?

Añadir un comentario

Se envía al elegir «Sí» o «No». Solo se guardan la página, tu respuesta y el comentario: ni cookies ni datos tuyos.

0 de 2000 caracteres

Editar en GitHub: docs/reference/macros/definemeekoconfig.md