Introdução
Fresh representa a próxima geração de frameworks web, construído para ser veloz, confiável e simples.
Algumas características marcantes:
- Renderização just-in-time na borda.
- Hidratação do cliente baseada em ilha para interatividade máxima.
- Sem sobrecarga de tempo de execução: nenhum JS é enviado ao cliente por padrão.
- Sem etapa de compilação.
- Nenhuma configuração necessária.
- Suporte ao TypeScript desde o início.
- Roteamento de sistema de arquivos ao estilo do Next.js.
Dica
Saiba mais no site oficial do Deno Fresh
Integração com o Danet
Acreditamos que o Fresh é um framework incrível para o frontend, graças à renderização do lado do servidor (SSR) com hidratação parcial, roteamento de sistema de arquivos e suporte ao TypeScript.
No entanto, na nossa opinião, ele carece de recursos especializados para o backend que permitam aos desenvolvedores construir uma arquitetura de backend de nível empresarial com flexibilidade e robustez.
Ao mesmo tempo, o Danet carece de recursos especializados para construir frontends incríveis.
É por isso que trabalhamos para fornecer uma maneira de executar ambos, no mesmo processo. Permitindo que você renderize páginas incríveis com o Fresh enquanto tem um código de lógica de negócios/API robusto que também pode ser usado no Fresh SSR para a primeira renderização.
Existem duas maneiras de fazer isso:
- Servir conteúdo do Fresh a partir do caminho
/
e seus pontos de extremidade de API a partir de um prefixo dedicado, como/api
. - Servir conteúdo do Fresh a partir de um prefixo dedicado, como
/dashboard
, e seus pontos de extremidade de API a partir da raiz/
.
Implantação
Até que o Deno Deploy lide com a opção do compilador emitDecoratorMetadata
, ou o Fresh lide com o empacotamento, não há como implantar um aplicativo Danet com integração Fresh no Deno Deploy se você usar uma instância de DanetApplication
nas ilhas do Fresh.
Configuração de Pastas e Arquivos
Boas notícias, há pouca ou nenhuma mudança na estrutura de pastas do seu aplicativo Danet ou Fresh!
Suponha que você tenha um danet-app
(gerado pelo nosso CLI) e um fresh-app
(gerado em fresh getting-started) lado a lado da seguinte forma:
Mova fresh-app
para dentro de danet-app/src
(não mostramos todos os arquivos que existem para fins de clareza):
Você pode excluir fresh-app/dev.ts
e fresh-app/main.ts
, mas lembre-se dos plugins que você usa em fresh-app/main.ts
para passá-los como parâmetros ao habilitar o Fresh no seu aplicativo Danet.
Fresh a partir da raiz
Para habilitar o Fresh a partir de /
, use a chamada do nosso Módulo Fresh: FreshModule.enableFreshFromRoot
a partir do seu DanetApplication
, ANTES de chamar .init
. Os argumentos deste método são:
- Seu DanetApplication
- URL da pasta Fresh
- o prefixo de onde você deseja que as rotas do Danet sejam acessíveis
- Objeto de configuração de início do Fresh.:
import { AppModule } from './app.module.ts';
import { DanetApplication } from 'danet/mod.ts';
import { configAsync } from 'dotenv/mod.ts';
import twindConfig from "./dashboard/twind.config.ts";
import twindPlugin from "$fresh/plugins/twind.ts";
import { FreshModule } from "danet-fresh/mod.ts";
export const application = new DanetApplication();
export const bootstrap = async () => {
await configAsync({export: true});
const freshAppDirectory = new URL('./fresh-app/', import.meta.url);
await FreshModule.enableFreshOnRoot(application, freshAppDirectory, '/api', {plugins: [twindPlugin(twindConfig)]});
await application.init(AppModule);
return application;
};
Dica
danet-fresh/mod.ts
está declarado no mapa de importação para apontar para https://deno.land/x/danet_fresh/
Fresh a partir de um caminho específico
Para habilitar o Fresh a partir de um caminho específico, simplesmente chame: .enableFresh
no seu DanetApplication
, ANTES de chamar .init
. Os argumentos deste método são:
- Seu DanetApplication
- URL da pasta Fresh
- o prefixo de onde você deseja que as rotas do Fresh sejam acessíveis
- Objeto de configuração de início do Fresh.:
import { AppModule } from './app.module.ts';
import { DanetApplication } from 'danet/mod.ts';
import { configAsync } from 'dotenv/mod.ts';
import twindConfig from "./dashboard/twind.config.ts";
import twindPlugin from "$fresh/plugins/twind.ts";
import { FreshModule } from "danet-fresh/mod.ts";
export const application = new DanetApplication();
export const bootstrap = async () => {
await configAsync({ export: true });
const freshAppDirectory = new URL('./fresh-app/', import.meta.url);
await FreshModule.enableFresh(application, freshAppDirectory, '/dashboard', { plugins: [twindPlugin(twindConfig)] });
await application.init(AppModule);
return application;
};
Dica
danet-fresh/mod.ts
está declarado no mapa de importação para apontar para https://deno.land/x/danet_fresh/
Exemplo de Trabalho
Há um branch específico no nosso projeto inicial com uma aplicação Fresh de demonstração na pasta src/dashboard
, servido a partir da raiz.
Confira, se necessário!