Analog

El meta-framework fullstack para Angular

Basado en Vite. Enrutamiento por archivos. Rutas API. SSR y SSG. Todo lo que necesitas para crear aplicaciones y sitios modernos con Angular.

~/my-app
$ vite buildvite building client environment for production...vite building ssr environment for production...transforming...✓ 325 modules transformed.rendering chunks...✓ 985 modules transformed.computing gzip size...dist/client/index.html                                  1.42 kB │ gzip:  0.71 kBdist/client/assets/styles-DG3kLxYZ.css                  8.74 kB │ gzip:  2.31 kBdist/client/assets/router-Bs1mQ2Dn.js                  18.55 kB │ gzip:  6.84 kBdist/client/assets/content-BMF8KG2I.js                 59.86 kB │ gzip:  5.31 kBdist/client/assets/(home).page-CKxFXlHY.js             21.67 kB │ gzip:  5.60 kBdist/client/assets/docs.page-DdVccY_7.js                1.65 kB │ gzip:  0.82 kBdist/client/assets/__...slug__.page-BL_P3rL8.js        22.80 kB │ gzip:  6.86 kBdist/client/assets/SidebarDrawer-CauwW0x6.js           10.26 kB │ gzip:  2.94 kBdist/client/assets/index-CVGT2tp1.js                  366.98 kB │ gzip: 98.56 kBdist/ssr/assets/__...slug__.page-DtcjJoL6.mjs             0.08 kB │ gzip:  0.09 kBdist/ssr/assets/overview-BdZizd5o2.mjs                    0.33 kB │ gzip:  0.24 kBdist/ssr/assets/overview-gxyYn8v8.mjs                     0.34 kB │ gzip:  0.26 kBdist/ssr/assets/contributing-B83XZww7.mjs                 0.35 kB │ gzip:  0.24 kBdist/ssr/assets/overview-CQRmUDJ9.mjs                     0.35 kB │ gzip:  0.26 kBdist/ssr/assets/support-DLAA5sQ1.mjs                      1.46 kB │ gzip:  0.74 kBdist/ssr/assets/compatibility-BZp34UUz.mjs                1.58 kB │ gzip:  0.73 kBdist/ssr/assets/docs.page-DdVccY_7.mjs                    1.65 kB │ gzip:  0.82 kBdist/ssr/assets/introduction-N_pq0X4B.mjs                 1.66 kB │ gzip:  0.88 kBdist/ssr/assets/sponsoring-B3SIcVC_.mjs                   3.26 kB │ gzip:  1.44 kBdist/ssr/assets/ai-CM8fF-iZ.mjs                           3.37 kB │ gzip:  1.58 kBdist/ssr/assets/code-generation-D3nEY0Jc.mjs              3.46 kB │ gzip:  0.91 kBdist/ssr/assets/getting-started-BBfHjgQX.mjs              4.35 kB │ gzip:  1.19 kBdist/ssr/assets/sidebar-0YQ3z2x-.mjs                      5.00 kB │ gzip:  1.27 kBdist/ssr/assets/nx-BNqm_DkJ.mjs                           5.02 kB │ gzip:  1.63 kBdist/ssr/assets/overview-44-GjfuI.mjs                     6.48 kB │ gzip:  2.29 kBdist/ssr/assets/css-preprocessors-CQfu_AHS.mjs            8.38 kB │ gzip:  1.26 kBdist/ssr/assets/server-side-data-fetching-Cfucm9Ra.mjs    9.50 kB │ gzip:  1.60 kBdist/ssr/assets/SidebarDrawer-CauwW0x6.mjs               10.26 kB │ gzip:  2.94 kBdist/ssr/assets/middleware-C797dNXV.mjs                  10.60 kB │ gzip:  1.44 kBdist/ssr/assets/migrating-hJYmSKgU.mjs                   11.88 kB │ gzip:  1.54 kBdist/ssr/assets/contributing-XmnAkxCh.mjs                14.82 kB │ gzip:  3.31 kBdist/ssr/assets/og-image-generation-DxcxVtL1.mjs         15.48 kB │ gzip:  2.35 kBdist/ssr/assets/server-side-rendering-C01L6B-f.mjs       17.74 kB │ gzip:  2.03 kBdist/ssr/assets/angular-material-i01XyO0x.mjs            18.14 kB │ gzip:  2.48 kBdist/ssr/assets/(home).page-CKxFXlHY.mjs                 21.67 kB │ gzip:  5.60 kBdist/ssr/assets/__...slug__.page-BL_P3rL8.mjs            22.80 kB │ gzip:  6.86 kBdist/ssr/assets/metadata-C5mGU_4S.mjs                    22.59 kB │ gzip:  2.38 kBdist/ssr/assets/websockets-fkNokGag.mjs                  25.44 kB │ gzip:  2.46 kBdist/ssr/assets/libraries-BouNIxxQ.mjs                   28.63 kB │ gzip:  2.94 kBdist/ssr/assets/migrating-7oCQdL3T.mjs                   31.68 kB │ gzip:  3.39 kBdist/ssr/assets/forms-CNTfSCaP.mjs                       37.20 kB │ gzip:  3.53 kBdist/ssr/assets/vitest-Ct7_OCIH.mjs                      41.57 kB │ gzip:  4.03 kBdist/ssr/assets/providers-CWTrAY_M.mjs                   47.16 kB │ gzip:  7.26 kBdist/ssr/assets/ionic-BwIlEq-c.mjs                       51.91 kB │ gzip:  5.77 kBdist/ssr/assets/static-site-generation-C5zOsHes.mjs      58.21 kB │ gzip:  4.62 kBdist/ssr/assets/contributors-BZhKJ-kP.mjs                58.87 kB │ gzip:  7.22 kBdist/ssr/assets/storybook-BmH4JEXl.mjs                   59.04 kB │ gzip:  4.96 kBdist/ssr/assets/content-CpCKBY6T.mjs                     62.11 kB │ gzip:  5.44 kBdist/ssr/assets/providers-BB74njZp.mjs                   71.76 kB │ gzip:  9.19 kBdist/ssr/assets/content-2qeL0Vxi.mjs                     76.30 kB │ gzip:  6.34 kBdist/ssr/assets/static-site-generation-AUywW2Um.mjs      80.39 kB │ gzip:  5.36 kBdist/ssr/main.server.mjs                                130.82 kB │ gzip: 26.11 kB✓ built in 7.66s

Enrutamiento

Enrutamiento basado en el sistema de archivos

Los archivos en se convierten en rutas. Los corchetes son dinámicos. Los corchetes dobles son catch-all. Los paréntesis son grupos sin ruta.

Sin archivo de configuración de rutas. Sin paso de registro. Agrega un archivo, publica una página.

src/app/pages/

  • (home).page.ts
  • about.page.ts
  • docs/[[...slug]].page.ts
  • products/[id].page.ts
  • api/og.ts

generated routes

  • /
  • /about
  • /docs/*
  • /products/:id
  • /api/og

Fullstack

Cliente y servidor, un par de archivos

Coloca un loader del servidor junto al componente de la página. Analog lo ejecuta en el servidor, envía solo la respuesta al cliente y tipa la respuesta de extremo a extremo.

La página importa el tipo del loader. Sin cliente API aparte, sin fetch manual.

Page component (browser).page.ts
// src/app/pages/products/[id].page.ts
import { Component } from '@angular/core';
import { injectLoad } from '@analogjs/router';
import type { load } from './[id].server';

@Component({
  template: `
    <h1>{{ product().name }}</h1>
    <p>{{ product().price | currency }}</p>
  `,
})
export default class ProductPage {
  protected readonly product = injectLoad<typeof load>();
}
Server load (server-only).server.ts
// src/app/pages/products/[id].server.ts
import type { PageServerLoad } from '@analogjs/router';
import { db } from '~/server/db';

export const load = async ({
  params,
}: PageServerLoad) => {
  const product = await db.products.byId(
    params['id'],
  );
  return product;
};

Ecosistema

El ecosistema de Vite, en Angular

Analog se conecta con las herramientas en las que tu equipo ya confía. Sin fork, sin shim. Los mismos plugins, la misma configuración.

Analog es gratuito, de código abierto, y está respaldado por nuestros partners y patrocinadores.

Partners

Zerops

Patrocinadores

NxSnyder TechCodeRabbit
Asóciate con Analog