imports
Carpetas de autoimports además de las de por defecto, cada una con el ámbito de la carpeta que la contiene, app, shared o server.
imports añade carpetas cuyos exports se autoimportan, además de las de por defecto (app/components, app/composables, app/utils, app/stores, app/types, shared/{types,schemas,utils,constants,enums} y server/utils). Cada opción admite sólo carpetas dentro de su raíz, y cada carpeta toma el ámbito de esa raíz, así que un servicio de server/ nunca llega a un componente.
serverDirs existe desde 1.0; appDirs y sharedDirs, desde 1.3. Las carpetas se buscan también dentro de cada layer, con la misma ruta relativa.
Uso#
// meeko.config.ts
import { defineMeekoConfig } from "@meekojs/meeko/framework";
export default defineMeekoConfig({
imports: {
appDirs: ["app/services"],
sharedDirs: ["shared/validators"],
serverDirs: ["server/services", "server/repositories"],
},
});Tipo#
readonly imports?: {
readonly appDirs?: readonly string[]
readonly sharedDirs?: readonly string[]
readonly serverDirs?: readonly string[]
}Opciones#
| Opción | Tipo | Por defecto | Descripción |
|---|---|---|---|
appDirs |
readonly string[] |
[] |
Desde 1.3. Carpetas dentro de app/, con el ámbito de app/: componentes y .ts de app/, en el navegador y en SSR; también el código de servidor. No shared/. |
sharedDirs |
readonly string[] |
[] |
Desde 1.3. Carpetas dentro de shared/, con el ámbito de shared/: todo el proyecto. |
serverDirs |
readonly string[] |
[] |
Carpetas dentro de server/, sólo para el código de servidor: server/, <script server>, sidecars *.route.ts y *.server.ts. |
Cada entrada es una ruta relativa que empieza por su raíz (app/…, shared/…, server/…), con / o \ y sin segmentos . ni ...
Resultado#
Cada carpeta se lee de forma recursiva, en el proyecto y en cada layer. Sus .ts y .mts aportan exports (sin *.test.ts, *.spec.ts ni *.d.ts); los .meeko de estas carpetas no son componentes. Los sufijos .client.ts, .server.ts y .shared.ts mandan sobre el ámbito de la carpeta. Los nombres de los exports son planos: la subcarpeta no se añade al nombre, a diferencia de los componentes (App/Card.meeko es AppCard). export function total() en app/utils/cart/total.ts es total, no CartTotal, y dos archivos que exportan total en un ámbito son el error de nombre repetido, aunque estén en carpetas distintas. Un .mts aporta sus exports como un .ts. Un .cts sólo sirve para tipos: export type funciona, pero un valor con export da TS1287 en meeko check y meeko build y hace responder 500 a la página en meeko dev, y export = no aporta ningún nombre.
- Un
typeo unainterfacellegan conimport type. - Un export del proyecto con el nombre de un autoimport del framework (
useRoute,useForm…) tiene prioridad. - Dos archivos que exportan el mismo nombre en un ámbito son un error que nombra ambos.
- Una carpeta que ya es de autoimports o que está dentro de otra de la lista no se lee dos veces.
meeko checky el editor declaran los nombres en.meeko/types/autoimports/.
Ejemplos#
Servicios de servidor sin imports#
// server/services/orders.ts
export async function markReady(id: string): Promise<{ id: string; status: "ready" }> {
return { id, status: "ready" };
}// server/api/orders/[id]/ready.post.ts: markReady llega por autoimport
export default defineApiRoute({ params: orderParams, handler: ({ params }) => markReady(params.id) });Validadores compartidos por el formulario y la API#
// shared/validators/email.ts
export const isCorporateEmail = (value: string): boolean => value.endsWith("@acme.example");isCorporateEmail está disponible en app/, en server/ y en el propio shared/.
Un servicio que sólo es de servidor dentro de appDirs#
app/services/cart.ts → app/ (navegador y SSR)
app/services/payments.server.ts → sólo servidor: un componente que lo usa da MEEK108Errores comunes#
Una ruta fuera de su raíz#
export default defineMeekoConfig({ imports: { appDirs: ["services"] } });meeko dev, meeko build, meeko check y meeko routes se detienen con …/meeko.config.ts: imports.appDirs[0] debe ser una ruta relativa dentro de app/: services; el editor de un workspace de confianza lo marca en la entrada (MEEK_CONFIG).
import { defineMeekoConfig } from "@meekojs/meeko/framework";
export default defineMeekoConfig({ imports: { appDirs: ["app/services"] } });Usar en un componente un servicio de serverDirs#
<!-- app/pages/orders.meeko -->
<script lang="ts">
const orders = await listOrders(); // de server/services
</script>meeko check da MEEK108: el código de servidor no puede llegar al navegador. Cárguelo en <script server> o expóngalo con una API.
<script server lang="ts">
export const orders = await listOrders();
</script>imports que no es un objeto#
export default defineMeekoConfig({ imports: ["server/services"] as never });…/meeko.config.ts: imports debe ser un objeto.
import { defineMeekoConfig } from "@meekojs/meeko/framework";
export default defineMeekoConfig({ imports: { serverDirs: ["server/services"] } });Notas#
- Ámbitos y seguridad. El ámbito evita que un secreto de
server/acabe en el bundle del navegador:serverDirssólo existe en el código de servidor. - Desarrollo. Crear, editar o borrar un
.tsde estas carpetas recarga el registro sin reiniciar; cambiar las listas deimportsexige reiniciarmeeko dev. - Editor. En un workspace no confiable, el editor lee las tres listas sin ejecutar la configuración si son arrays literales de cadenas.