diff --git a/src/content/docs/pt-br/basics/astro-components.mdx b/src/content/docs/pt-br/basics/astro-components.mdx index 1b68d8a2d8dc4..c8dde452abd20 100644 --- a/src/content/docs/pt-br/basics/astro-components.mdx +++ b/src/content/docs/pt-br/basics/astro-components.mdx @@ -10,7 +10,7 @@ Componentes Astro são extremamente flexíveis. Geralmente, um componente Astro A coisa mais importante de entender sobre componentes Astro é que eles **não renderizam no lado do cliente**. Eles renderizam para HTML em tempo de build ou sob demanda usando [renderização no lado do servidor (SSR)](/pt-br/guides/on-demand-rendering/). Você pode incluir código JavaScript dentro do frontmatter do seu componente, e todo esse código vai ser removido da página final enviada para o navegador dos seus usuários. O resultado é um site mais rápido, sem nenhum JavaScript adicionado por padrão. -Quando seu componente Astro realmente precisar de interatividade no lado do cliente, você pode adicionar [tags ` - -``` - -Você pode buscar a sessão do usuário utilizando o método `getSession`. - -```astro title="src/pages/index.astro" {3,5} ---- -import Layout from 'src/layouts/Base.astro'; -import { getSession } from 'auth-astro/server'; - -const session = await getSession(Astro.request); ---- - - { - session ? ( -

Bem-vindo {session.user?.name}

- ) : ( -

Não realizou o login

- ) - } -
-``` - -### Próximos passos - -- [`auth-astro` no GitHub](https://github.com/nowaythatworked/auth-astro?tab=readme-ov-file#auth-astro) -- [Documentação do Auth.js](https://authjs.dev/) - -## Recursos da comunidade - -- [Uso do Microsoft Entra Id EasyAuth com o Astro e o Azure Static Web App](https://agramont.net/blog/entra-id-easyauth-with-astro/) diff --git a/src/content/docs/pt-br/guides/backend/index.mdx b/src/content/docs/pt-br/guides/backend/index.mdx deleted file mode 100644 index ae7fd1339931e..0000000000000 --- a/src/content/docs/pt-br/guides/backend/index.mdx +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Use um serviço de backend com o Astro -description: Como usar um serviço de backend para adicionar autenticação, armazenamento e dados -i18nReady: true ---- -import BackendGuidesNav from '~/components/BackendGuidesNav.astro'; - -**Pronto para adicionar recursos como autenticação, armazenamento ou dados ao seu projeto em Astro?** Siga um de nossos guias para integrar um serviço de backend. - -:::tip -Encontre [integrações mantidas pela comunidade](https://astro.build/integrations/) em nosso diretório de integrações para adicionar funcionalidades populares ao seu projeto. -::: - -## Guia de serviços de backend - -Note que várias dessas páginas são **esboços**: coleções de recursos esperando por sua contribuição. - - - -## O que é um serviço de backend? - -Um serviço de backend é um sistema baseado em nuvem que ajuda você a criar e gerenciar sua infraestrutura de backend. Ele fornece um conjunto de ferramentas e serviços para gerenciamento de bancos de dados, autenticação de usuário e outras funcionalidades do lado do servidor. Isso permite que você se concentre na construção de suas aplicações sem ter que se preocupar com o gerenciamento da infraestrutura interna. - -## Por que eu usaria um serviço de backend? - -Você pode querer considerar um serviço de backend se seu projeto tiver necessidades complexas do lado do servidor, como por exemplo: -- registro e autenticação de usuário -- armazenamento de dados persistente -- armazenamento de assets carregados pelo usuário -- geração de API -- comunicação em tempo real - diff --git a/src/content/docs/pt-br/guides/backend/turso.mdx b/src/content/docs/pt-br/guides/backend/turso.mdx deleted file mode 100644 index a703c0e881136..0000000000000 --- a/src/content/docs/pt-br/guides/backend/turso.mdx +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Turso & Astro -description: Construa localmente com um arquivo SQLite e publique globalmente usando Turso. -type: backend -service: Turso -stub: false -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -[Turso](https://turso.tech) é um banco de dados distribuído construído com libSQL, um fork do SQLite. Ele é otimizado para baixa latência de consulta, tornando-o adequado para aplicações globais. - -## Inicializando o Turso no Astro - -### Pré-requisitos - -- [CLI Turso](https://docs.turso.tech/reference/turso-cli) instalada e autenticada -- Um banco de dados com esquema [Turso](https://turso.tech) -- A URL do seu banco de dados -- Um token de acesso - -### Configurar variáveis de ambiente - -Obtenha a URL do seu banco de dados usando o seguinte comando: - -```bash -turso db show --url -``` - -Crie um token de autenticação para o banco de dados: - -```bash -turso db tokens create -``` - -Adicione a saída de ambos os comandos acima em seu arquivo `.env` na raiz do projeto. Se esse arquivo não existir, crie um. - -```ini title=".env" -TURSO_DATABASE_URL=libsql://... -TURSO_AUTH_TOKEN= -``` - -:::caution -Não use o prefixo `PUBLIC_` ao criar estas [variáveis de ambiente](/pt-br/guides/environment-variables/) privadas. Isso irá expor esses valores para o cliente. -::: - -### Instalar o cliente LibSQL - -Instale o `@libsql/client` para conectar Turso ao Astro: - - - - ```shell - npm install @libsql/client - ``` - - - ```shell - pnpm add @libsql/client - ``` - - - ```shell - yarn add @libsql/client - ``` - - - -### Inicializar um novo cliente - -Crie um arquivo `turso.ts` na pasta `src` e invoque `createClient`, passando `TURSO_DATABASE_URL` e `TURSO_AUTH_TOKEN`: - -```ts title="src/turso.ts" -import { createClient } from "@libsql/client/web"; - -export const turso = createClient({ - url: import.meta.env.TURSO_DATABASE_URL, - authToken: import.meta.env.TURSO_AUTH_TOKEN, -}); -``` - -## Consultando seu banco de dados - -Para acessar informações do seu banco de dados, importe `turso` e [execute uma consulta SQL](https://docs.turso.tech/libsql/client-access/javascript-typescript-sdk#execute-a-single-statement) dentro de qualquer componente `.astro`. - -O exemplo a seguir busca todos os `posts` da sua tabela e exibe uma lista de títulos em um componente ``: - -```astro title="src/components/BlogIndex.astro" ---- -import { turso } from '../turso' - -const { rows } = await turso.execute('SELECT * FROM posts') ---- - -
    - {rows.map((post) => ( -
  • {post.title}
  • - ))} -
-``` - -### _Placeholders_ SQL - -O método `execute()` pode aceitar [um objeto para passar variáveis para a declaração SQL](https://docs.turso.tech/libsql/client-access/javascript-typescript-sdk#positional-placeholders), como `slug` ou paginação. - -O exemplo a seguir busca uma única entrada na tabela `posts` onde (`WHERE`) o `slug` é o valor obtido de `Astro.params`, e então exibe o título da postagem. - -```astro title="src/pages/index.astro" ---- -import { turso } from '../turso' - -const { slug } = Astro.params - -const { rows } = await turso.execute({ - sql: 'SELECT * FROM posts WHERE slug = ?', - args: [slug!] -}) ---- - -

{rows[0].title}

-``` - -## Recursos Turso -- [Documentação Turso](https://docs.turso.tech) -- [Turso no GitHub](https://github.com/tursodatabase) -- [Usando Turso para servir o conteúdo de um blog Astro renderizado no lado do servidor](https://blog.turso.tech/using-turso-to-serve-a-server-side-rendered-astro-blogs-content-58caa6188bd5) diff --git a/src/content/docs/pt-br/guides/client-side-scripts.mdx b/src/content/docs/pt-br/guides/client-side-scripts.mdx deleted file mode 100644 index 48d59f10feab4..0000000000000 --- a/src/content/docs/pt-br/guides/client-side-scripts.mdx +++ /dev/null @@ -1,249 +0,0 @@ ---- -title: Scripts e Manipulação de Eventos -description: >- - Como adicionar interatividade no lado do cliente aos componentes do Astro - usando APIs JavaScript nativas do navegador. -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro' - -Você pode adicionar interatividade em seus componentes Astro sem [utilizar um framework de UI](/pt-br/guides/framework-components/) como React, Svelte, Vue, etc. usando tags ` -``` - -Por padrão, o Astro processa e agrupa tags ` -``` - -### Processamento do Script - -Por padrão, tags ` -``` - -O atributo `type="module"` faz com que o navegador trate o script como um módulo JavaScript. Isso traz vários benefícios de desempenho: -- A renderização não é bloqueada. O navegador continua a processar o restante do HTML enquanto o script do módulo e suas dependências são carregados. -- O navegador aguarda o processamento do HTML antes de executar scripts de módulo. Você não precisa escutar o evento "load". -- Os atributos `async` e `defer` são desnecessários. Os scripts de módulo são sempre adiados. - -:::note -O atributo `async` é valioso para scripts normais, pois impede que eles bloqueiem a renderização. No entanto, os scripts de módulo já possuem esse comportamento. Adicionar `async` a um script de módulo fará com que ele seja executado antes que a página tenha carregado completamente. Isso provavelmente não é o que você deseja. -::: - -### Optando por não processar - -Para evitar fazer o bundle do script, você pode adicionar a diretiva `is:inline`. - -```astro title="src/components/ScriptInline.astro" "is:inline" - -``` - -:::note -Astro não processara suas tags de script em algumas situações. Especialmente, ao adicionar `type="module"` ou qualquer outro atributo diferente de `src` a uma tag ` - - - -``` - -#### Carregando scripts externos - -**Quando utilizar isto:** Se o seu arquivo JavaScript está dentro de `public/` ou em uma CDN. - -Para carregar scripts fora do diretório `src/` do seu projeto, inclua a diretiva `is:inline`. Esta abordagem pula o processamento, bundling e otimizações do JavaScript que são providenciadas pelo Astro quando você importa scripts como descrito acima. - -```astro title="src/components/ScriptsExternos.astro" "is:inline" - - - - - -``` - -## Padrões de script comuns - -### Manipulando `onclick` e outros eventos - -Alguns frameworks de UI utilizam uma sintaxe customizada para manipular eventos como `onClick={...}` (React/Preact) ou `@click="..."` (Vue). Astro segue mais fielmente o HTML padrão e não utiliza uma sintaxe customizada para eventos. - -No lugar, você pode utilizar [`addEventListener`](https://developer.mozilla.org/pt-BR/docs/Web/API/EventTarget/addEventListener) em uma tag ` -``` - -:::note -Se você tem múltiplos componentes `` em uma página, Astro não irá executar o script múltiplas vezes. Scripts passam por bundle e são inclusos apenas uma vez por página. Utilizar `querySelectorAll` garante que este script anexe o event listener para cada botão com a classe `alerta` encontrado na página. -::: - -### Web components com elementos customizados - -Você pode criar seus próprios elementos HTML com comportamentos customizados usando o padrão Web Components. Definir um [elemento customizado](https://developer.mozilla.org/pt-BR/docs/Web/Web_Components/Using_custom_elements) em um componente `.astro` te permite construir componentes interativos sem precisar de uma biblioteca ou framework de UI. - -Neste exemplo, definimos um novo elemento HTML `` que rastreia quantas vezes você clicou no botão de coração e atualiza a `` com o contagem atual. - -```astro title="src/components/CoracaoAstro.astro" - - - × 0 - - - -``` - -Há duas vantagens em utilizar um elemento customizado aqui: - -1. Ao invés de procurar em toda a página usando `document.querySelector()`, você pode utilizar `this.querySelector()`, que apenas pesquisa dentro da instância do elemento customizado atual. Isso torna mais fácil trabalhar apenas com filhos de uma instância de componente por vez. - -2. Apesar do ` -``` - -Agora podemos utilizar nosso componente múltiplas vezes e seremos cumprimentados com uma mensagem diferente para cada uma. - -```astro title="src/pages/exemplo.astro" ---- -import SaudacaoAstro from '../components/SaudacaoAstro.astro'; ---- - - - - - - - -``` - -:::tip[Você sabia?] -Isto é o que o Astro faz nos bastidores quando você passa props para um componente escrito utilizando um framework de UI como React! Para componentes com uma diretiva `client:*`, o Astro cria um elemento customizado `` com o atributo `props` que armazena as suas props do lado do servidor no HTML resultante. -::: diff --git a/src/content/docs/pt-br/guides/cms/caisy.mdx b/src/content/docs/pt-br/guides/cms/caisy.mdx deleted file mode 100644 index f90d6d6384ecd..0000000000000 --- a/src/content/docs/pt-br/guides/cms/caisy.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Caisy & Astro -description: Adicione conteúdo ao seu projeto Astro usando o Caisy como um CMS -type: cms -service: Caisy -i18nReady: true -stub: true ---- - -[Caisy](https://caisy.io/) é um CMS headless que expõe uma API GraphQL para acessar conteúdo. - -## Usando o Caisy CMS com Astro - -Use `graphql-request` e o renderizador de texto rico do Caisy para o Astro buscar seus dados do CMS e exibir seu conteúdo em uma página do Astro: - -```astro title="src/pages/blog/[...slug].astro" ---- -import RichTextRenderer from '@caisy/rich-text-astro-renderer'; -import { gql, GraphQLClient } from 'graphql-request'; - -const params = Astro.params; - -const client = new GraphQLClient( - `https://cloud.caisy.io/api/v3/e/${import.meta.env.CAISY_PROJECT_ID}/graphql`, - { - headers: { - 'x-caisy-apikey': import.meta.env.CAISY_API_KEY - } - } -); -const responstaGql = await client.request( - gql` - query allBlogArticle($slug: String) { - allBlogArticle(where: { slug: { eq: $slug } }) { - edges { - node { - text { - json - } - title - slug - id - } - } - } - } - `, - { slug: params.slug } -); - -const postagem = responstaGql?.allBlogArticle?.edges?.[0]?.node; ---- -

{postagem.title}

- -``` - -## Recursos Oficiais - -- Confira o exemplo de Caisy + Astro no [GitHub](https://github.com/caisy-io/caisy-example-astro) ou [Stackblitz](https://stackblitz.com/github/caisy-io/caisy-example-astro?file=src%2Fpages%2Fblog%2F%5B...slug%5D.astro) -- Consulte seus documentos no [modo rascunho](https://caisy.io/developer/docs/external-api/localization-and-preview#preview-mode-15) e em vários [idiomas](https://caisy.io/developer/docs/external-api/localization-and-preview#localization-in-a-graphql-query-8). -- Use [paginação](https://caisy.io/developer/docs/external-api/queries-pagination) para consultar um número grande de documentos. -- Use [filtragem](https://caisy.io/developer/docs/external-api/external-filter-and-sorting) nas suas consultas e [ordene](https://caisy.io/developer/docs/external-api/external-filter-and-sorting#sorting-8) os resultados diff --git a/src/content/docs/pt-br/guides/cms/wordpress.mdx b/src/content/docs/pt-br/guides/cms/wordpress.mdx deleted file mode 100644 index e4c6c90b980cb..0000000000000 --- a/src/content/docs/pt-br/guides/cms/wordpress.mdx +++ /dev/null @@ -1,193 +0,0 @@ ---- -title: Headless WordPress & Astro -description: Adicione conteúdo ao seu projeto Astro usando WordPress como CMS -type: cms -stub: false -service: WordPress -i18nReady: true ---- -import { FileTree } from '@astrojs/starlight/components'; -import Grid from '~/components/FluidGrid.astro' -import Card from '~/components/ShowcaseCard.astro' - -[WordPress](https://wordpress.org/) é um sistema de gerenciamento de conteúdo que dispõe de seu próprio frontend, mas que também pode ser usado como CMS headless para fornecer conteúdo ao seu projeto Astro. - -## Integrando com Astro - -WordPress vem com uma [WordPress REST API](https://developer.wordpress.org/rest-api/) embutida para conectar seus dados WordPress com Astro. Você pode instalar opcionalmente [WPGraphQL](https://wordpress.org/plugins/wp-graphql/) em seu site para usar GraphQL. - -### Pré-requisitos - -Para começar, você precisa ter o seguinte: - -1. **Um projeto Astro** - Se você ainda não tem um projeto Astro, nosso [Guia de Instalação](/pt-br/install-and-setup/) fará você construir um projeto o quanto antes. -2. **Um site WordPress** - A API REST do seu site é `[SEU_SITE]/wp-json/wp/v2/` e está disponível por padrão em qualquer site WordPress. Também é possível [configurar WordPress em um ambiente local](https://wordpress.org/support/article/installing-wordpress-on-your-own-computer/). - -### Configurando Credenciais - -Sua WordPress REST API está disponível para obter dados sem qualquer autenticação por padrão. Isso não permite que os usuários modifiquem seus dados ou as configurações do seu site, e permite que você use os dados em seu projeto Astro sem qualquer credencial. - -Você pode escolher [exigir autenticação](https://developer.wordpress.org/rest-api/frequently-asked-questions/#require-authentication-for-all-requests) se necessário. - -### Obtendo Dados - -Obtenha dados do seu WordPress através da sua URL REST API única e da rota para o seu conteúdo. (Para um blog, isso seria comumente `posts`.) Então, você pode mostrar as propriedades dos seus dados utilizando a diretiva `set:html={}` do Astro. - -Por exemplo, para mostrar uma lista de títulos de post e seu conteúdo: - -```astro title="src/pages/index.astro" ---- -const res = await fetch("https://[SEU-SITE]/wp-json/wp/v2/posts"); -const posts = await res.json(); ---- -

Astro + WordPress 🚀

-{ - posts.map((post) => ( -

-

- )) -} -``` - -A WordPress REST API inclui [parâmetros globais](https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/) como `_fields` e `_embed`. - -Uma grande quantidade de dados está disponível para você através dessa API, então você pode querer obter apenas alguns campos. Você pode restringir a sua resposta ao adicionar o parâmetro [`_fields`](https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/#_fields) na URL da API, por exemplo: `[SEU-SITE]/wp/v2/posts?_fields=author,id,excerpt,title,link` - -A API também pode retornar conteúdo relacionado ao seu post, como um link para o post acima, ou para os comentários do post. Você pode adicionar o parâmetro [`_embed`](https://developer.wordpress.org/rest-api/using-the-rest-api/global-parameters/#_embed) na URL da API, (e.g. `[SEU-SITE]/wp/v2/posts?_embed`) para indicar ao servidor que a resposta deve incluir estes recursos embutidos. - -## Construindo um blog com WordPress e Astro - -Este exemplo obtém dados da API pública do WordPress [https://norian.studio/dinosaurs/](https://norian.studio/dinosaurs/). Este site WordPress armazena informação sobre dinossauros individualmente sob a rota `dinos`, assim como um blog armazenaria seus posts individuais sob a rota `posts`. - -Este exemplo mostra como reproduzir esta estrutura de site no Astro: uma página índice que lista os dinossauros com links para páginas de dinossauros individuais geradas dinamicamente. - -:::note -Para usar [Custom Post Types (CPT)](https://learn.wordpress.org/lesson-plan/custom-post-types/) na sua API WordPress (não apenas `post` e `page`), você precisará [configurá-las em seu painel WordPress](https://stackoverflow.com/questions/48536646/how-can-i-get-data-from-custom-post-type-using-wp-rest-api) ou [adicionar suporte REST API para Custom Content Types](https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-rest-api-support-for-custom-content-types/) no WordPress. - -Este exemplo obtém dados de um site WordPress cujo qual tipos de conteúdo já foram configurados e expostos para a API REST. -::: - -### Mostrando uma lista de posts WordPress - -A página `src/pages/index.astro` lista cada dinossaurp, com uma descrição e link para uma página própria. - - -- src/ - - pages/ - - **index.astro** - - dinos/ - - [slug].astro -- astro.config.mjs -- package.json - - -A chamada para a API retorna u objeto que inclui as propriedades: - -- `title.rendered` - Contém o HTML do título do post. -- `content.rendered` - Contém o HTML do conteúdo do post. -- `slug` - Contém o slug do post. (Isso fornece o link para as páginas de dinossauro individuais geradas dinamicamente.) - -```astro title="/src/pages/index.astro" ---- -import Layout from "../layouts/Layout.astro"; - -let res = await fetch("https://norian.studio/wp-json/wp/v2/dinos"); -let posts = await res.json(); ---- - -

-

Lista de Dinossauros

- { - posts.map((post) => ( - - )) - } -
- -``` - -### Usando a API WordPress para gerar páginas - -A página `src/pages/dinos/[slug].astro` [gera uma página dinamicamente](/pt-br/guides/routing/#rotas-dinâmicas) para cada dinossauro. - -```astro title="/src/pages/dinos/[slug].astro" ---- -import Layout from '../../layouts/Layout.astro'; - -const { slug } = Astro.params; - -let res = await fetch(`https://norian.studio/wp-json/wp/v2/dinos?slug=${slug}`); -let [post] = await res.json(); - -// getStaticPaths() é exigido para sites Astro estáticos. -// Se usar SSR, você não precisará dessa função. -export async function getStaticPaths() { - let data = await fetch("https://norian.studio/wp-json/wp/v2/dinos"); - let posts = await data.json(); - - return posts.map((post) => ({ - params: { slug: post.slug }, - props: { post: post }, - })); -} ---- - -
-

- -

-
-``` - -### Retornando recursos embutidos - -O parâmetro `_embed` instrui o servidor a retornar recursos (embutidos) relacionados. -```astro title="src/pages/dinos/[slug].astro" /&_embed/ ---- -const { slug } = Astro.params; - -let res = await fetch(`https://norian.studio/wp-json/wp/v2/dinos?slug=${slug}&_embed`); -let [post] = await res.json(); ---- -``` - -A propriedade `_embedded['wp:featuredmedia']['0'].media_details.sizes.medium.source_url` é retornada, e pode ser usada para mostrar a imagem destacada em cada página de dinossauro. (Substitua `medium` com o tamanho de imagem que deseja.) - -```astro title="/src/pages/dinos/[slug].astro" {3} - -
- -

- -

-
-``` - -### Publicando seu site - -Para lançar seu site visite o nosso [guia de deploy](/pt-br/guides/deploy/) e siga as instruções para o seu fornecedor de hospedagem preferido. - -## Recursos da Comunidade - -- [Construindo um site Astro com WordPress como CMS Headless](https://blog.openreplay.com/building-an-astro-website-with-wordpress-as-a-headless-cms/) por Chris Bongers. -- [Construindo Astro x WordPress](https://www.youtube.com/watch?v=Jstqgklvfnc) pelo vídeo de Ben Holmes. -- [Construindo um Headless Wordpress com Astro](https://developers.wpengine.com/blog/building-a-headless-wordpress-site-with-astro) por Jeff Everhart. -- [Astro e WordPress como uma API](https://darko.io/posts/wp-as-an-api/) por Darko Bozhinovski. - -## Sites em Produção - -Os seguintes sites utilizam Astro + WordPress em produção: - -- [Soft Hard System](https://softhardsystem.com/) por Rafid Muhymin Wafi — [código-fonte no GitHub](https://github.com/RafidMuhymin/softhardsystem) -- [Dinos!](https://wc-dinos.netlify.app/) por Anindo Neel Dutta — [código-fonte no GitHub](https://github.com/leen-neel/astro-wordpress) - -## Temas - - - - diff --git a/src/content/docs/pt-br/guides/configuring-astro.mdx b/src/content/docs/pt-br/guides/configuring-astro.mdx deleted file mode 100644 index 78a58f3c608b0..0000000000000 --- a/src/content/docs/pt-br/guides/configuring-astro.mdx +++ /dev/null @@ -1,172 +0,0 @@ ---- -title: Configurando Astro -i18nReady: true ---- -import ReadMore from '~/components/ReadMore.astro' - -Customize o funcionamento do Astro adicionando um arquivo `astro.config.mjs` em seu projeto. Este é um arquivo comum em projetos Astro e todos os templates oficiais o incluem por padrão. - -Leia a [referência de configuração da API](/pt-br/reference/configuration-reference/) do Astro para uma visão geral de todas as opções de configuração suportadas. - -## O Arquivo de Configuração Astro - -Um arquivo de configuração Astro válido exporta sua configuração com a exportação `default`, usando a função auxiliar `defineConfig`: - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // suas opções de configuração aqui... - // https://docs.astro.build/pt-br/reference/configuration-reference/ -}) -``` - -Usar `defineConfig()` é recomendado para dicas de tipagem automáticas na sua IDE porém também é opcional. Uma configuração mínima válida se pareceria com algo assim: - -```js title="astro.config.mjs" -// Exemplo: Configuração mínima, um arquivo vazio -export default {} -``` - -## Tipos de Arquivo de Configuração Suportados - -Astro suporta outros formatos de arquivos para seu arquivo de configuração JavaScript: `astro.config.js`, `astro.config.mjs`, `astro.config.cjs` e `astro.config.ts`. Nós recomendamos utilizar `.mjs` na maioria dos casos ou `.ts` se você quiser escrever TypeScript no seu arquivo de configuração. - -O arquivo de configuração TypeScript é gerenciado usando o [`tsm`](https://github.com/lukeed/tsm) e irá respeitar as opções definidas no `tsconfig` do seu projeto. - -## Resolução do Arquivo de Configuração - -Astro irá tentar buscar automaticamente um arquivo de configuração com o nome `astro.config.mjs` na raiz de seu projeto. Se nenhum arquivo for encontrado, as opções padrão do Astro serão utilizadas. - -```bash -# Exemplo: Lê sua configuração em ./astro.config.mjs -astro build -``` - -Você pode passar o arquivo de configuração explicitamente usando a opção `--config` da interface de linha de comando. Esta opção sempre busca o arquivo relativo ao diretório no qual você está executando o comando `astro` em seu terminal. - -```bash -# Exemplo: Lê suas opções de configuração neste arquivo -astro build --config minha-configuracao.js -``` - -## IntelliSense da Configuração - -Astro recomenda o uso da função auxiliar `defineConfig()` em seu arquivo de configuração. `defineConfig()` proporciona IntelliSense automático em sua IDE. Editores como VSCode são capazes de ler as definições de tipo TypeScript do Astro e providencia dicas de tipagem JSDoc automáticas, mesmo que seu arquivo de configuração não esteja escrito em TypeScript. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // suas opções de configuração aqui... - // https://docs.astro.build/pt-br/reference/configuration-reference/ -}) -``` - -Você também pode providenciar manualmente as definições de tipo para o VSCode, usando essa notação JSDoc: - -```js -// astro.config.mjs -export default /** @type {import('astro').AstroUserConfig} */ { - // suas opções de configuração aqui... - // https://docs.astro.build/pt-br/reference/configuration-reference/ -} -``` - -## Referenciando Arquivos Relativos - -Se você providenciar um caminho relativo à opção `root` ou passar a opção `--root` da interface de linha de comando, Astro irá resolver os arquivos de acordo com o diretório que o comando `astro` estiver executando. - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Resulta no diretório "./foo" em seu diretório de trabalho atual - root: 'foo' -}) -``` - -Astro irá resolver todos os outros arquivos e diretórios relativos à raiz do projeto definida: - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Resulta no diretório "./foo" em seu diretório de trabalho atual - root: 'foo', - // Resulta no diretório "./foo/public" em seu diretório de trabalho atual - publicDir: 'public', -}) -``` - -Para referenciar um arquivo ou diretório relativo ao arquivo de configuração, use `import.meta.url` (a menos que você esteja em um arquivo common.js `astro.config.cjs`): - -```js "import.meta.url" -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - // Resulta no diretório "./foo" relativo a este arquivo de configuração. - root: new URL("./foo", import.meta.url).toString(), - // Resulta no diretório "./foo/public" relativo a este arquivo de configuração. - publicDir: new URL("./public", import.meta.url).toString(), -}) -``` - -:::note -Propriedades específicas do Vite de `import.meta`, como `import.meta.env` ou `import.meta.glob`, _não_ são acessíveis em seu arquivo de configuração. Nós recomendamos alternativas como [dotenv](https://github.com/motdotla/dotenv) ou [fast-glob](https://github.com/mrmlnc/fast-glob) para esses respectivos casos de uso. Adicionalmente, [nomes de caminho alternativos do tsconfig](https://www.typescriptlang.org/tsconfig#paths) não serão resolvidos. Use caminhos relativos nestes arquivos para importar módulos. -::: - -## Customizando Nomes de Arquivos Finais - -Para código que o Astro processa, como arquivos JavaScript e CSS importados, você pode customizar os nomes de arquivos finais utilizando [`entryFileNames`](https://rollupjs.org/configuration-options/#output-entryfilenames), [`chunkFileNames`](https://rollupjs.org/configuration-options/#output-chunkfilenames), e [`assetFileNames`](https://rollupjs.org/configuration-options/#output-assetfilenames) na entrada `vite.build.rollupOptions` no seu arquivo `astro.config.*`. - -```js ins={9-11} -// astro.config.mjs -import { defineConfig } from 'astro/config' - -export default defineConfig({ - vite: { - build: { - rollupOptions: { - output: { - entryFileNames: 'entry.[hash].mjs', - chunkFileNames: 'chunks/chunk.[hash].mjs', - assetFileNames: 'assets/asset.[hash][extname]', - }, - }, - }, - }, -}) -``` - -Isto pode ser útil caso você tenha scripts com nomes que podem ser afetados por bloqueadores de anúncios (ex. `ads.js` ou `google-tag-manager.js`). - -## Variáveis de Ambiente - -Astro verifica arquivos de configuração antes de carregar seus outros arquivos. Portanto, você não pode utilizar `import.meta.env` para acessar variáveis de ambiente que foram definidas em arquivos `.env`. - -Você pode utilizar `process.env` em um arquivo de configuração para acessar outras variáveis de ambiente, como aquelas [definidas pela CLI](/pt-br/guides/environment-variables/#usando-a-cli). - -Você também pode utilizar [o utilitário `loadEnv` do Vite](https://main.vite.dev/config/#using-environment-variables-in-config) para manualmente carregar arquivos `.env`. - -:::note -O `pnpm` não permite você importar módulos que não estão diretamente instalados no seu projeto. Se você está usando `pnpm`, você terá que instalar `vite` para usar o utilitário `loadEnv`. - -```sh -pnpm add vite --save-dev -``` -::: - -```js title="astro.config.mjs" -import { loadEnv } from "vite"; -const { SENHA_SECRETA } = loadEnv(process.env.NODE_ENV, process.cwd(), ""); -``` - -## Referência de Configuração - -Leia a [referência de configuração da API](/pt-br/reference/configuration-reference/) do Astro para uma visão geral de todas as opções de configuração suportadas. diff --git a/src/content/docs/pt-br/guides/content-collections.mdx b/src/content/docs/pt-br/guides/content-collections.mdx deleted file mode 100644 index 1b50f696d629c..0000000000000 --- a/src/content/docs/pt-br/guides/content-collections.mdx +++ /dev/null @@ -1,598 +0,0 @@ ---- -title: Coleções de Conteúdo -description: >- - Coleções de conteúdo ajudam a organizar seu Markdown e a checar os tipos do seu frontmatter com esquemas. -i18nReady: true ---- -import { FileTree } from '@astrojs/starlight/components'; -import Since from '~/components/Since.astro' -import RecipeLinks from "~/components/RecipeLinks.astro" -import Badge from "~/components/Badge.astro" - -

- -**Coleções de conteúdo** são a melhor forma de gerenciar e criar conteúdo em qualquer projeto Astro. Coleções ajudam a organizar seu documentos, validar seu frontmatter, e fornece checagem automática de tipos do TypeScript para todo seu conteúdo. - -## O que são Coleções de Conteúdo? - -Uma **coleção de conteúdo** é qualquer pasta de nível superior dentro da pasta reservada do projeto `src/content`, como `src/content/newsletter` e `src/content/autores`. Apenas coleções de conteúdo são permitidas dentro da pasta `src/content`. Essa pasta não pode ser usada para nada além disso. - -Uma **entrada da coleção** é qualquer peça de conteúdo armazenada dentro da sua pasta da coleção de conteúdo. Entradas podem usar formatos de autoria de conteúdo incluindo Markdown (`.md`) e MDX (`.mdx` usando a [integração do MDX](/pt-br/guides/integrations-guide/mdx/)) ou como formatos de dados incluindo YAML (`.yaml`) e JSON (`.json`). Nós recomendamos usar um esquema de nomenclatura consistente (minúsculas, traços ao invés de espaços) para seus arquivos para tornar fácil de encontrar e organizar seu conteúdo, mas isso não é obrigatório. Você também pode [excluir entradas de serem incluídas no build](/pt-br/guides/routing/#excluindo-páginas) ao prefixar o nome do arquivo com um sublinhado (_). - - -- src/content/ - - **newsletter/** a coleção "newsletter" - - semana-1.md uma entrada da coleção - - semana-2.md uma entrada da coleção - - semana-3.md uma entrada da coleção - - -Tendo a coleção, você pode começar a [consultar seu conteúdo](#consultando-coleções) usando as APIs de conteúdo integradas no Astro. - -### A Pasta ".astro" - -O Astro armazena metadados importantes para coleções de conteúdo em uma pasta `.astro` no seu projeto. Nenhuma ação é necessária da sua parte para manter ou atualizar essa pasta. Você é encorajado a ignorá-lo completamente enquanto estiver trabalhando no seu projeto. - -A pasta `.astro` vai ser atualizada para você automaticamente sempre que você executa os comandos [`astro dev`](/pt-br/reference/cli-reference/#astro-dev) e [`astro build`](/pt-br/reference/cli-reference/#astro-build). Você pode executar [`astro sync`](/pt-br/reference/cli-reference/#astro-sync) a qualquer momento para atualizar a pasta `.astro` manualmente. - -:::tip -Se você está usando Git para controle de versão, nós recomendamos ignorar a pasta `.astro` adicionando `.astro` no seu `.gitignore`. Isso diz ao Git ignorar essa pasta e quaisquer arquivos dentro dela. - -```bash -echo "\n.astro" >> .gitignore -``` -::: - -### Organizando com múltiplas coleções - -Se dois arquivos representam diferentes tipos de conteúdo (por exemplo, uma postagem de blog e um perfil de autor), eles provavelmente pertencem a coleções diferentes. Isso é importante porque muitas funcionalidades (validação do frontmatter, segurança automática de tipo do TypeScript) requerem que todas as entradas em uma coleção compartilhem uma estrutura similar. - -Se você se encontrar trabalhando com diferentes tipos de conteúdo, você deve criar múltiplas coleções para representar cada tipo. Você pode criar quantas coleções diferentes você quiser no seu projeto. - - -- src/content/ - - **newsletter/** - - semana-1.md - - semana-2.md - - **blog/** - - postagem-1.md - - postagem-2.md - - **autores/** - - grace-hopper.json - - alan-turing.json - - -### Organizando com subpastas - -Uma coleção de conteúdo é sempre uma pasta no nível superior dentro da pasta `src/content/`. Você não pode aninhar uma coleção dentro da outra. Entretanto, você pode usar subpastas para organizar seu conteúdo dentro de uma coleção. - -Por exemplo, você pode usar a seguinte estrutura de pasta para organizar traduções dentro de uma única coleção `docs`. Quando você consultar essa coleção, você vai ser capaz de filtrar o resultado pelo idioma usando o caminho do arquivo. - - -- src/content/ - - docs/ essa coleção usa subpastas para organizar por idioma - - **en/** - - **es/** - - **de/** - - -## Definindo Coleções - -:::note -O arquivo `src/content/config.ts` é opcional. Entretanto, escolher não definir suas coleções vai desabilitar algumas das suas melhores funcionalidades como validação do esquema do frontmatter ou tipagem automática do TypeScript. -::: - -Para obter o máximo de suas coleções de conteúdo, crie um arquivo `src/content/config.ts` no seu projeto (extensões `.js` e `.mjs` também são suportadas). Esse é um arquivo especial que o Astro vai automaticamente carregar e usar para configurar suas coleções de conteúdo. - -```ts -// src/content/config.ts -// 1. Importe utilitários do `astro:content` -import { defineCollection } from 'astro:content'; -// 2. Defina sua(s) coleção(ões) -const colecaoBlog = defineCollection({ /* ... */ }); -// 3. Exporte um único objeto `collections` para registrar sua(s) coleção(ões) -// Essa chave deve corresponder com o nome da pasta da coleção em "src/content" -export const collections = { - 'blog': colecaoBlog, -}; -``` - -### Configurando o TypeScript - -Se você ainda **não** estende as configurações recomendadas de TypeScript `strict` ou `strictest` do Astro no seu arquivo `tsconfig.json`, talvez você precise atualizar seu `tsconfig.json` para habilitar `strictNullChecks`. - -```json title="tsconfig.json" ins={5} -{ - // Nota: Nenhuma alteração é necessária se você usa "astro/tsconfigs/strict" ou "astro/tsconfigs/strictest" - "extends": "astro/tsconfigs/base", - "compilerOptions": { - "strictNullChecks": true - } -} -``` - -Se você use arquivos `.js` ou `.mjs` em um projeto Astro, você pode habilitar o IntelliSense e checagem de tipo no seu editor ao habilitar `allowJs` no seu `tsconfig.json`: -```json title="tsconfig.json" ins={6} -{ - // Nota: Nenhuma alteração é necessária se você usa "astro/tsconfigs/strict" ou "astro/tsconfigs/strictest" - "extends": "astro/tsconfigs/base", - "compilerOptions": { - "strictNullChecks": true, - "allowJs": true - } -} -``` - -### Definindo um esquema de coleção - -Os esquemas impõem dados consistentes de frontmatter ou de entrada em uma coleção. Um esquema **garante** que esses dados existam de forma previsível quando você precisar fazer referência a eles ou consultá-los. Se qualquer arquivo viola o esquema de sua coleção, o Astro vai fornecer um erro útil para informá-lo. - -Os esquemas também compõe a tipagem automática de TypeScript do Astro para seu conteúdo. Quando você define um esquema para sua coleção, o Astro vai automaticamente gerar e aplicar uma interface do TypeScript para ela. O resultado é o suporte completo ao TypeScript quando você consulta sua coleção, incluindo o preenchimento automático de propriedades e a checagem de tipos - -Para definir sua primeira coleção, crie um arquivo `src/content/config.ts` se um ainda não existir (extensões `.js` e `.mjs` também são suportadas). Esse arquivo deve: - -1. **Importar os utilitários adequados** de `astro:content`. -2. **Definir cada coleção que você gostaria de validar**. Isso inclui um `type` (introduzido no Astro v2.5.0) especificando se a coleção contém formatos de autoria de conteúdo como Markdown (`type: 'content'`) ou formatos de dados como JSON ou YAML (`type: 'data'`). Isso também inclui um `schema` que define o formato do seu frontmatter ou entrada de dados. -3. **Exportar um único objeto `collections`** para registrar suas coleções. - -```ts -// src/content/config.ts -// 1. Importe utilitários do `astro:content` -import { z, defineCollection } from 'astro:content'; - -// 2. Defina um `type` e um `schema` para cada coleção -const colecaoBlog = defineCollection({ - type: 'content', // v2.5.0 e posterior - schema: z.object({ - titulo: z.string(), - tags: z.array(z.string()), - imagem: z.string().optional(), - }), -}); - -// 3. Exporte um único objeto `collections` para registrar sua(s) coleção(ões) -export const collections = { - 'blog': colecaoBlog, -}; -``` - -### Definindo múltiplas coleções - -Você pode usar `defineCollection()` quantas vezes você quiser para criar vários esquemas. Todas as coleções devem ser exportadas de dentro de um único objeto `collections`. - -```ts -// src/content/config.ts -const colecaoBlog = defineCollection({ - type: 'content', - schema: z.object({ /* ... */ }) -}); -const newsletter = defineCollection({ - type: 'content', - schema: z.object({ /* ... */ }) -}); -const autores = defineCollection({ - type: 'data', - schema: z.object({ /* ... */ }) -}); - -export const collections = { - 'blog': colecaoBlog, - 'newsletter': newsletter, - 'autores': autores, -}; -``` - -Conforme seu projeto cresce, você também é livre para reorganizar sua base de código e mover a lógica para fora do arquivo `src/content/config.ts`. Definir seus esquemas separadamente pode ser útil para reutilizar esquemas através de múltiplas coleções e compartilhar esquemas com outras partes do seu projeto. - -```ts -// src/content/config.ts -// 1. Importe seus utilitários e esquemas -import { defineCollection } from 'astro:content'; -import { esquemaBlog, esquemaAutor } from '../schemas'; - -// 2. Defina suas coleções -const colecaoBlog = defineCollection({ - type: 'content', - schema: esquemaBlog, -}); -const colecaoAutor = defineCollection({ - type: 'data', - schema: esquemaAutor, -}); - -// 3. Exporte várias coleções para registrá-las -export const collections = { - 'blog': colecaoBlog, - 'authors': colecaoAutor, -}; -``` - -### Usando esquemas de coleção de terceiros - -Você pode importar esquemas de coleção de qualquer lugar, incluindo pacotes npm externos. Isso pode ser útil ao trabalhar com temas e bibliotecas que fornecem seus próprios esquemas de coleção para você usar. - -```ts -// src/content/config.ts -import { esquemaBlog } from 'meu-tema-de-blog'; -const colecaoBlog = defineCollection({ type: 'content', schema: esquemaBlog }); - -// Exporte a coleção do blog, usando um esquema externo do 'meu-tema-de-blog' -export const collections = { - 'blog': colecaoBlog, -}; -``` - -### Definindo tipos de dados com Zod - -O Astro usa [Zod](https://github.com/colinhacks/zod) para alimentar sues esquemas de conteúdo. Com Zod, o Astro é capaz de validar cada frontmatter dos arquivos dentro de uma coleção *e* fornecer tipos do TypeScript automaticamente quando você vai consultar conteúdo de dentro do seu projeto. - -Para usar Zod no Astro, importe o utilitário `z` do `"astro:content"`. Esse é uma reexportação da biblioteca Zod, e ele suporta todas as funcionalidades do Zod. Veja o [README do Zod](https://github.com/colinhacks/zod) para a documentação completa de como o Zod funciona e quais funcionalidades estão disponíveis. - -```ts -// Exemplo: Uma cheatsheet de muitos tipos de dados comuns com Zod -import { z, defineCollection } from 'astro:content'; - -defineCollection({ - schema: z.object({ - isRascunho: z.boolean(), - titulo: z.string(), - ordenacao: z.number(), - imagem: z.object({ - src: z.string(), - alt: z.string(), - }), - autor: z.string().default('Anônimo'), - idioma: z.enum(['en', 'es']), - tags: z.array(z.string()), - // Uma propriedade opcional do frontmatter. Muito comum! - notaRodape: z.string().optional(), - // No frontmatter, datas escritas sem aspas envolta delas são interpretadas como objetos Date - dataPublicacao: z.date(), - // Você também pode transformar uma string de data (por exemplo, "2022-07-08") para um objeto Date - // dataPublicacao: z.string().transform((str) => new Date(str)), - // Avançado: Validar que a string também é um email - contatoAutor: z.string().email(), - // Avançado: Validar que a string também é uma URL - URLCanonica: z.string().url(), - }) -}) -``` - -### Definindo referências de coleção - -Entradas de coleções também podem "referenciar" outras entradas relacionadas. - -Com a função `reference()` da API de Coleções, você pode definir uma propriedade de um esquema de coleção como uma entrada de outra coleção. Por exemplo, você pode exigir que todas as entradas `nave-espacial` incluam uma propriedade `piloto` que usa o esquema da coleção `piloto` para checagem de tipo, conclusão automática e validação. - -Um exemplo comum é uma postagem de blog que referencia perfis de autor reutilizáveis armazenados como JSON, ou URLs de postagens relacionadas armazenadas na mesma coleção: - -```ts -import { defineCollection, reference, z } from 'astro:content'; - -const blog = defineCollection({ - type: 'content', - schema: z.object({ - titulo: z.string(), - // Referencia um único autor da coleção `autores` pelo `id` - autor: reference('autores'), - // Referencia um array de postagens relacionadas da coleção `blog` pelo `slug` - postagensRelacionadas: z.array(reference('blog')), - }) -}); - -const autores = defineCollection({ - type: 'data', - schema: z.object({ - nome: z.string(), - portfolio: z.string().url(), - }) -}); - -export const collections = { blog, autores }; -``` - -Este exemplo de postagem de blog especifica os `slug`s de postagens relacionadas e o `id` do autor da postagem: - -```yaml title="src/content/blog/bem-vindo.md" ---- -titulo: "Bem-vindo ao meu blog" -autor: ben-holmes # referencia `src/content/autores/ben-holmes.json` -postagensRelacionadas: -- sobre-mim # referencia `src/content/blog/sobre-mim.md` -- minha-retrospectiva # referencia `src/content/blog/minha-retrospectiva.md` ---- -``` - -### Definindo slugs customizados - -Ao usar `type: 'content'`, toda entrada de conteúdo gera uma propriedade `slug` amigável para URL a partir do seu [`id` do arquivo](/pt-br/reference/modules/astro-content/#id). O slug é usado para consultar a entrada diretamente da sua coleção. Ela também é útil ao criar novas páginas e URLs do seu conteúdo. - -Você pode sobrescrever a slug gerada para a entrada ao adicionar seu própria propriedade `slug` ao frontmatter do arquivo. Isso é similar à funcionalidade `permalink` de outros frameworks web. `"slug` é um nome de propriedade especial e reservada que não é permitida no seu `schema` customizado da coleção e não vai aparecer na propriedade `data` da sua entrada. - -```md {3} ---- -title: Minha Postagem de Blog -slug: minha-slug-customizada/suporta/barras ---- -Seu conteúdo da postagem do blog vem aqui. -``` - -## Consultando Coleções - -O Astro fornece duas funções para consultar uma coleção e retornar um (ou mais) entradas de conteúdo: [`getCollection()`](/pt-br/reference/modules/astro-content/#getcollection) e [`getEntry()`](/pt-br/reference/modules/astro-content/#getentry). - -```js -import { getCollection, getEntry } from 'astro:content'; - -// Obtém todas as entradas de uma coleção. -// Requer o nome da coleção como um argumento. -// Exemplo: recuperar `src/content/blog/**` -const todasPostagensDoBlog = await getCollection('blog'); - -// Obtém uma única entrada de uma coleção. -// Requer o nome da coleção e ou o `slug` da -// entrada (coleções de conteúdo) ou o `id` (coleções de dados) -// Exemplo: recuperar `src/content/autores/grace-hopper.json` -const perfilGraceHopper = await getEntry('autores', 'grace-hopper'); -``` - -Ambas as funções retornam entradas de conteúdo definidas pelo tipo [`CollectionEntry`](/pt-br/reference/modules/astro-content/#collectionentry). - -### Acessando dados referenciados - -Quaisquer [referências definidas no seu esquema](#definindo-referências-de-coleção) precisam ser consultadas separadamente após primeiro consultar sua primeira entrada da coleção. Você pode usar a função `getEntry()` de novo ou `getEntries()`, para recuperar a entrada referenciada a do objeto `data` retornado. - -```astro title="src/pages/blog/bem-vindo.astro" ---- -import { getEntry, getEntries } from 'astro:content'; - -const postagemBlog = await getEntry('blog', 'bem-vindo'); - -// Recupera um única referencia -const autor = await getEntry(postagemBlog.data.autor); -// Recupera um array de referências -const postagensRelacionadas = await getEntries(postagemBlog.data.postagensRelacionadas); ---- - -

{postagemBlog.data.titulo}

-

Autor: {autor.data.nome}

- - - -

Você também pode gostar:

-{postagensRelacionadas.map(p => ( -
{p.data.titulo} -))} -``` - -### Filtrando consultas de coleção - -`getCollection()` recebe um callback opcional "filter" que permite que você filtre sua consulta baseado em um `id` ou propriedades do `data` (frontmatter) da entrada. Para coleções `type: 'content'`, você também pode filtrar baseado no `slug`. - -:::note -A propriedade `slug` é específica para coleções de conteúdo e não vai estar disponível ao filtrar coleções de JSON ou YAML. -::: - -Você pode usar isso para filtrar por qualquer critério de conteúdo que você quiser. Por exemplo, você pode filtrar por propriedades como `draft` para evitar que quaisquer postagens do blog em rascunho sejam publicadas para seu blog: - -```js -// Exemplo: Filtrar entradas de conteúdo com `draft: true` -import { getCollection } from 'astro:content'; -const entradasPublicadasBlog = await getCollection('blog', ({ data }) => { - return data.draft !== true; -}); -``` - -Você também pode criar páginas de rascunho que são disponibilizadas ao executar o servidor de desenvolvimento, mas não são construídas em produção: - -```js -// Exemplo: Filtrar entradas de conteúdo com `draft: true` apenas ao fazer build para produção -import { getCollection } from 'astro:content'; -const entradasBlog = await getCollection('blog', ({ data }) => { - return import.meta.env.PROD ? data.draft !== true : true; -}); -``` - -O argumento de filtragem também suporta filtragem por pastas aninhadas dentro de uma coleção. Já que o `id` inclui o caminho aninhado completo, você pode filtrar pelo começo de cada `id` para retornar somente itens de uma pasta aninhada específica: - -```js -// Exemplo: Filtrar entradas por sub-pasta em uma coleção -import { getCollection } from 'astro:content'; -const entradasDocsIngles = await getCollection('docs', ({ id }) => { - return id.startsWith('en/'); -}); -``` - -### Usando conteúdo em templates do Astro - -Uma vez que você tenha consultado suas entradas de coleção, você pode acessar cada entrada diretamente do template do seu componente Astro. Isso permite que você renderize HTML para coisas como links para seu conteúdo (usando o `slug` do conteúdo) ou informação sobre seu conteúdo (usando a propriedade `data`). - -Para informações sobre renderizando seu conteúdo para HTML, veja [Renderizando Conteúdo para HTML](/pt-br/guides/content-collections/#renderizando-conteúdo-para-html) abaixo. - -```astro ---- -// src/pages/index.astro -import { getCollection } from 'astro:content'; -const entradasBlog = await getCollection('blog'); ---- - -``` - -### Passando conteúdo como props - -Um componente também pode passar uma entrada de conteúdo inteira como prop. - -Se você fizer isso, você pode usar o utilitário [`CollectionEntry`](/pt-br/reference/modules/astro-content/#collectionentry) para definir corretamente o tipo de props de seus componentes usando TypeScript. Esse utilitário recebe uma string como argumento que corresponde com o nome do esquema da sua coleção e vai herdar todas as propriedades desse esquema de coleção. - -```astro /CollectionEntry(?:<.+>)?/ ---- -// src/components/CartaoBlog.astro -import type { CollectionEntry } from 'astro:content'; -interface Props { - postagem: CollectionEntry<'blog'>; -} - -// `postagem` vai corresponder com o tipo do esquema de coleção 'blog' -const { postagem } = Astro.props; ---- -``` - -### Renderizando conteúdo para HTML - -Uma vez consultada, você pode renderizar entradas Markdown e MDX para HTML usando a propriedade de função `render()` da entrada. A chamada dessa função lhe dá acesso ao conteúdo e aos metadados renderizados, incluindo um componente `` e uma lista de todos os cabeçalhos renderizados. - -```astro {5} ---- -// src/pages/exemplo-render.astro -import { getEntry } from 'astro:content'; -const entrada = await getEntry('blog', 'postagem-1'); -const { Content, headings } = await entry.render(); ---- -

Publicado em: {entry.data.publicado.toDateString()}

- -``` - -## Gerando Rotas a partir do Conteúdo - -Coleções de conteúdo são armazenadas fora da pasta `src/pages/`. Isso significa que nenhuma rota é gerada para seus itens de coleção por padrão. Você vai precisar criar manualmente uma nova [rota dinâmica](/pt-br/guides/routing/#rotas-dinâmicas) para gerar páginas HTML das suas entradas de coleção. Sua rota dinâmica vai mapear os parâmetros de requisição recebidos (por exemplo, `Astro.params.slug` em `src/pages/blog/[...slug].astro`) para buscar a entrada correta dentro de uma coleção. - -O método exato para gerar rotas vai depender do modo [`output`](/pt-br/reference/configuration-reference/#output) da sua build: 'static' (o padrão) ou 'server' (para SSR). - -### Fazendo a build para saída estática (padrão) - -Se você está construindo um website estático (comportamento padrão do Astro), você usaria a função [`getStaticPaths()`](/pt-br/reference/routing-reference/#getstaticpaths) para criar múltiplas páginas a partir de um único componente no `src/pages/` durante seu build. - -Chame `getCollection()` dentro de `getStaticPaths()` para [consultar sua coleção de conteúdo ou de dados](#consultando-coleções). Em seguida, crie seus novos caminhos de URL usando a propriedade `slug` (coleções de conteúdo) ou a propriedade `id` (coleções de dados) de cada entrada de conteúdo. - -```astro "{ slug: entry.slug }" ---- -// src/pages/postagens/[...slug].astro -import { getCollection } from 'astro:content'; -// 1. Gere um novo caminho para cada entrada da coleção -export async function getStaticPaths() { - const entradasBlog = await getCollection('blog'); - return entradasBlog.map(entrada => ({ - params: { slug: entrada.slug }, props: { entrada }, - })); -} -// 2. Quando for hora de renderizar, você pode pegar e entrada diretamente da prop -const { entrada } = Astro.props; -const { Content } = await entrada.render(); ---- -

{entrada.data.titulo}

- -``` - -Isso vai gerar uma nova página para cada entrada na coleção `blog`. Por exemplo, uma entrada em `src/content/blog/ola-mundo.md` vai ter a slug `ola-mundo` e portanto sua URL final vai ser `/postagens/ola-mundo/`. - -:::note -Se seus slugs customizados incluem o caractere `/` para produzir URLs com múltiplos segmentos no caminho, você precisa usar um [parâmetro rest (`[...caminho]`)](/pt-br/guides/routing/#parâmetros-rest) no nome do arquivo `.astro` nessa página de rota dinâmica. -::: - -### Fazendo a build para saída de servidor (SSR) - -Se você está construindo um website dinâmico (usando o suporte a SSR do Astro), não é esperado que você gerará nenhum caminho de antemão durante a build. Ao invés disso, sua página deve examinar a requisição (usando `Astro.request` ou `Astro.params`) para encontrar o `slug` sob demanda e então buscar ele usando [`getEntry()`](/pt-br/reference/modules/astro-content/#getentry). - -```astro ---- -// src/pages/postagens/[...slug].astro -import { getEntry } from "astro:content"; -// 1. Pega o slug da requisição recebida pelo servidor -const { slug } = Astro.params; -if (slug === undefined) { - throw new Error("O slug é obrigatório"); -} -// 2. Consulta pela entrada diretamente usando o slug da requisição -const entrada = await getEntry("blog", slug); -// 3. Redireciona se a entrada não existir -if (entrada === undefined) { - return Astro.redirect("/404"); -} -// 4. (Opcional) Renderiza a entrada para HTML no template -const { Content } = await entrada.render(); ---- -``` - -## Migrando do Roteamento Baseado em Arquivos - -Se você tiver um projeto Astro existente, como um blog, que utiliza arquivos Markdown ou MDX em subpastas dentro de `src/pages/`, considere migrar conteúdo relacionado ou arquivos de dados para coleções de conteúdo. - -Veja como converter um exemplo básico de blog de `src/pages/posts/` para `src/content/posts` em nosso [tutorial passo a passo](/pt-br/tutorial/6-islands/4/) que utiliza o código-fonte do [projeto final do tutorial Construa um Blog](https://github.com/withastro/blog-tutorial-demo). - -## Habilitando o Cache de Build - -

- -Se você estiver trabalhando com coleções grandes, talvez queira ativar builds com cache com a flag [`experimental.contentCollectionCache`](/pt-br/reference/configuration-reference/#experimentalcontentcollectioncache). Essa funcionalidade experimental otimiza o processo de build do Astro, permitindo que coleções inalteradas sejam armazenadas e reutilizadas entre builds. - -Em muitos casos, isso pode levar a melhorias significativas no desempenho de build. - -Enquanto essa funcionalidade se estabiliza, você pode ter problemas com o cache armazenado. Você sempre pode redefinir o cache de build executando o seguinte comando: - -``` -npm run astro build -- --force -``` - -## Modificando o Frontmatter com Remark - -:::caution -**Não recomendado.** Os plugins remark e rehype acessam o frontmatter bruto do documento Markdown ou MDX. Isso significa que o frontmatter do `remarkPluginFrontmatter` é tratado separadamente do seu `schema` com segurança de tipos e não refletirá nenhuma alteração ou padrão aplicado pelo Astro. Use por sua conta e risco! -::: - -Astro suporta plugins remark ou rehype que [modificam seu frontmatter diretamente](/pt-br/guides/markdown-content/#modificando-frontmatter-programaticamente). Você pode acessar esse frontmatter modificado dentro de uma entrada de conteúdo usando a propriedade `remarkPluginFrontmatter` retornada do `render()`: - -```astro "{ remarkPluginFrontmatter }" ---- -import { getEntry } from 'astro:content'; -const postagemBlog = await getEntry('blog', 'postagem-1'); -const { remarkPluginFrontmatter } = await postagemBlog.render(); ---- -

{postagemBlog.data.titulo} — {remarkPluginFrontmatter.tempoLeitura}

-``` - - - -Os pipelines do remark e rehype executam quando seu conteúdo é renderizado, que explica o porquê de `remarkPluginFrontmatter` só estar disponível depois de você chamar `render()` na sua entrada de conteúdo. Em contraste, `getCollection()` e `getEntry()` não podem retornar esses valores diretamente porque eles não renderizam seu conteúdo. - -## Trabalhar com datas no frontmatter - -Vários formatos de data são possíveis em coleções de conteúdo, mas o esquema de sua coleção deve corresponder ao formato usado em seu frontmatter de Markdown ou MDX YAML. - -O YAML usa o padrão [ISO-8601](https://www.iso.org/iso-8601-date-and-time-format.html) para expressar datas. Use o formato `yyyy-mm-dd` (por exemplo, `2021-07-28`) junto com um tipo de esquema `z.date()`: - -```markdown title="src/pages/postagens/postagem-exemplo.md" ---- -titulo: Minha Postagem de Blog -dataPublicacao: 2021-07-08 ---- -``` - -O formato da data será especificado em UTC se não for fornecido um fuso horário. Se você precisar especificar um fuso horário, poderá usar o formato [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601). - -```markdown title="src/pages/postagens/postagem-exemplo.md" ---- -titulo: Minha Postagem de Blog -dataPublicacao: 2021-07-08T12:00:00-04:00 ---- -``` - -Para renderizar somente o `YYYY-MM-DD` do registro de data e hora UTC completo, use o método `slice` do JavaScript para remover o registro de data e hora: - -```astro title="src/layouts/LayoutExemplo.astro" ---- -const { frontmatter } = Astro.props; ---- -

{frontmatter.titulo}

-

{frontmatter.dataPublicacao.toString().slice(0,10)}

-``` - -Para ver um exemplo de uso de `toLocaleDateString` para formatar o dia, o mês e o ano, consulte o [componente ``](https://github.com/withastro/astro/blob/latest/examples/blog/src/components/FormattedDate.astro) no template oficial do blog do Astro. diff --git a/src/content/docs/pt-br/guides/data-fetching.mdx b/src/content/docs/pt-br/guides/data-fetching.mdx deleted file mode 100644 index dd33bb11af883..0000000000000 --- a/src/content/docs/pt-br/guides/data-fetching.mdx +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Busca de Dados -description: Aprenda como buscar dados remotamente com Astro utilizando a API fetch. -i18nReady: true ---- - -Arquivos `.astro` podem buscar dados remotamente para te ajudar a gerar suas páginas. - -## `fetch()` em Astro - -Todos os [componentes Astro](/pt-br/basics/astro-components/) tem acesso a [função global `fetch()`](https://developer.mozilla.org/pt-BR/docs/Web/API/fetch) em seus scripts do componente para fazer requisições HTTP à APIs usando a URL completa (e.x. https://example.com/api ou `Astro.url + "/api"`). -Além disso, você pode construir uma URL para as páginas e endpoints do seu projeto que são renderizados sob demanda no servidor usando `new URL("/api", Astro.url)`. - -Essa chamada ao `fetch` será executada em tempo de build, e os dados estarão disponíveis ao template do componente para gerar HTML dinâmico. Se o modo [SSR](/pt-br/guides/on-demand-rendering/) estiver habilitado, quaisquer chamadas a `fetch()` serão executadas em runtime. - -💡 Aproveite-se do [**top-level await**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#top_level_await) dentro do script do seu componente Astro. - -💡 Passe os dados buscados para componentes Astro e de outros frameworks como props. - -```astro /await fetch\\(.*?\\)/ ---- -// src/components/Usuario.astro -import Contato from '../components/Contato'; -import Localizacao from '../components/Localizacao.astro'; - -const resposta = await fetch('https://randomuser.me/api/'); -const dados = await resposta.json(); -const usuarioAleatorio = dados.results[0]; ---- - -

Usuário

-

{usuarioAleatorio.name.first} {usuarioAleatorio.name.last}

- - - - -``` - -:::note -Lembre-se, todos os dados em componentes Astro são buscados quando o componente é renderizado. - -Seu site Astro após o deploy irá buscar os dados **uma vez, em tempo de build**. No desenvolvimento, você verá a busca de dados ao recarregar componentes. Se você precisa buscar dados múltiplas vezes no lado do cliente, utilize um [componente de framework](/pt-br/guides/framework-components/) ou um [script no lado do cliente](/pt-br/guides/client-side-scripts/) em um componente Astro. -::: - - -## `fetch()` em Componentes de Frameworks - -A função `fetch()` também está globalmente disponível a qualquer [componente de framework](/pt-br/guides/framework-components/): - -```tsx title="src/components/Filmes.tsx" /await fetch\\(.*?\\)/ -import type { FunctionalComponent } from 'preact'; - -const dados = await fetch('https://exemplo.com/filmes.json').then((resposta) => - resposta.json() -); - -// Componentes que são renderizados no momento de build também fazem logs na interface de linha de comando. -// Quando renderizado com uma diretiva client:*, eles também irão fazer logs no console do navegador. -console.log(dados); - -const Filmes: FunctionalComponent = () => { -// Exibe o resultado na página - return
{JSON.stringify(dados)}
; -}; - -export default Filmes; -``` - - -### Consultas GraphQL - -Astro também pode utilizar `fetch()` para consultar um servidor GraphQL com qualquer consulta GraphQL válida. - -```astro title="src/components/Filme.astro" "await fetch" ---- -const resposta = await fetch("https://swapi-graphql.netlify.app/.netlify/functions/index", - { - method: 'POST', - headers: {'Content-Type':'application/json'}, - body: JSON.stringify({ - query: ` - query getFilm ($id:ID!) { - film(id: $id) { - title - releaseDate - } - } - `, - variables: { - id: "ZmlsbXM6MQ==", - }, - }), - }); - -const json = await resposta.json(); -const { film } = json.data; ---- -

Buscando informações sobre Star Wars: Uma Nova Esperança

-

Título: {film.title}

-

Ano: {film.releaseDate}

-``` - -## Busque de um CMS Headless - -Componentes Astro podem buscar dados de seu CMS favorito e então renderizá-lo como o conteúdo de sua página. Utilizando [rotas dinâmicas](/pt-br/guides/routing/#rotas-dinâmicas), componentes podem até mesmo gerar páginas com base no conteúdo do seu CMS. - -Veja nossos [Guias de CMS](/pt-br/guides/cms/) para mais detalhes em como integrar o Astro com CMSes headless incluindo Storyblok, Contentful e WordPress. - -## Conteúdo feitos pela comunidade - -- [Criando uma aplicação Full-Stack com Astro + GraphQL (Em Inglês)](https://robkendal.co.uk/blog/how-to-build-astro-site-with-graphql/) diff --git a/src/content/docs/pt-br/guides/deploy/aws.mdx b/src/content/docs/pt-br/guides/deploy/aws.mdx deleted file mode 100644 index 34e73e250a348..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/aws.mdx +++ /dev/null @@ -1,222 +0,0 @@ ---- -title: Faça Deploy do seu Site Astro na AWS -description: Como fazer o deploy do seu site Astro para web usando AWS. -type: deploy -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -[AWS](https://aws.amazon.com/) é uma plataforma de hospedagem de aplicações web completa que pode ser utilizada para fazer o deploy de um site Astro. - -Para fazer deploy do seu projeto na AWS será necessário a utilização do [console AWS](https://aws.amazon.com/console/). (A maioria dessas ações também pode ser feitas usando o [AWS CLI](https://aws.amazon.com/cli/)). Este guia irá lhe mostrar o passo a passo para fazer deploy do seu site na AWS utilizando o [AWS Amplify](https://aws.amazon.com/amplify/), [hospedagem de websites estáticos com S3](https://aws.amazon.com/s3/), e [CloudFront](https://aws.amazon.com/cloudfront/). - -## AWS Amplify - -AWS Amplify é um conjunto de ferramentas e funcionalidades especialmente concebidas para que programadores front-end web e mobile construam aplicações completas na AWS de forma rápida e fácil. - -1. Crie um novo projeto na Amplify Hosting. -2. Conecte seu repositório ao Amplify. -3. Modifique suas configurações de build para corresponder ao processo de build de seu projeto. - - - - ```yaml - version: 1 - frontend: - phases: - preBuild: - commands: - - npm i -g pnpm - - pnpm config set store-dir .pnpm-store - - pnpm i - build: - commands: - - pnpm run build - artifacts: - baseDirectory: /dist - files: - - '**/*' - cache: - paths: - - .pnpm-store/**/* - ``` - - - ```yaml - version: 1 - frontend: - phases: - preBuild: - commands: - - npm ci - build: - commands: - - npm run build - artifacts: - baseDirectory: /dist - files: - - '**/*' - cache: - paths: - - node_modules/**/* - ``` - - - ```yaml - version: 1 - frontend: - phases: - preBuild: - commands: - - yarn install - build: - commands: - - yarn build - artifacts: - baseDirectory: /dist - files: - - '**/*' - cache: - paths: - - node_modules/**/* - ``` - - - -O Amplify irá fazer deploy do seu site automaticamente e o atualizará quando você enviar um commit no seu repositório. - -## Hospedagem de websites estáticos com S3 - -S3 é o ponto de partida para qualquer aplicação. É onde os arquivos do seu projeto e outros assets são armazenados. O S3 cobra por arquivos armazenados e por número de requisições. Você pode encontrar mais informações sobre o S3 na [documentação da AWS](https://aws.amazon.com/pt/s3). - -1. Crie um bucket S3 com o nome do seu projeto. - - :::tip - O nome do bucket deve ser único globalmente. Nós recomendamos uma combinação do nome do seu projeto e o nome do domínio do seu site. - ::: - -2. Desabilite **"Bloquear todo o acesso público"**. Por padrão, a AWS define todos os buckets como privados. Para torná-lo público, você deve desmarcar a opção "Bloquear todo o acesso público" nas propriedades do seu bucket. - -3. Faça upload dos arquivos gerados na build localizados em `dist` para o S3. Você pode fazer isso manualmente no console ou usando o AWS CLI. Se você usar o AWS CLI, você pode usar o seguinte comando após [autenticar-se com suas credenciais da AWS](https://docs.aws.amazon.com/pt_br/cli/latest/userguide/cli-configure-files.html): - - ``` - aws s3 cp dist/ s3:/// --recursive - ``` - -4. Atualize a política do seu bucket para permitir o acesso público. Você pode encontrar esta configuração em **Permissões > Política do bucket**. - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "PublicReadGetObject", - "Effect": "Allow", - "Principal": "*", - "Action": "s3:GetObject", - "Resource": "arn:aws:s3:::/*" - } - ] - } - ``` - - :::caution - Não se esqueça de substituir `` com o nome do seu bucket. - ::: - -5. Habilite a hospedagem de websites para o seu bucket. Você pode encontrar esta configuração em **Propriedades > Hospedagem de site estático**. Defina seu documento de índice para `index.html` e seu documento de erro para `404.html`. Por fim, você pode encontrar a URL do seu site em **Propriedades > Hospedagem de site estático**. - - :::note - Se você estiver fazendo deploy de uma aplicação de página única (Single-Page application - SPA), defina seu documento de erro para `index.html`. - ::: - -## S3 com CloudFront - -CloudFront é um serviço web que oferece capacidades de uma rede de distribuição de conteúdo (Content Delivery Network - CDN). Ele é utilizado para armazenar o conteúdo de um servidor web e distribuí-lo aos usuários finais. O CloudFront cobra por quantidade de dados transferidos. Adicionar o CloudFront ao seu bucket S3 é mais econômico e proporciona uma entrega mais rápida. - -Para conectar o S3 ao CloudFront, crie uma distribuição do CloudFront com os seguintes valores: - - **Origin domain:** O endpoint do site estático do seu bucket S3. Você pode encontrar seu endpoint em **Propriedades > Hospedagem de site estático**. Alternativamente, você pode selecionar seu bucket S3 e clicar no balão de chamada para substituir o endereço do seu bucket pelo endpoint estático do seu bucket. - - **Viewer protocol policy:** "Redirect HTTP to HTTPS" - -Essa configuração servirá seu site usando a rede CDN do CloudFront. Você pode encontrar a URL da distribuição do CloudFront em **Distributions > Domain name** no bucket. - -:::note -Ao conectar o CloudFront a um endpoint de site estático do S3, você depende das políticas de bucket do S3 para controle de acesso. Consulte [hospedagem de websites estáticos com S3](/pt-br/guides/deploy/aws/#hospedagem-de-websites-estáticos-com-s3) para mais informações sobre políticas de bucket. -::: - -## Entrega contínua com GitHub Actions - -Existem várias maneiras de configurar a Entrega contínua para a AWS. Uma possibilidade para o código hospedado no GitHub é usar [GitHub Actions](https://github.com/features/actions) para fazer deploy de seu site toda vez que você enviar um commit. - -1. Crie uma nova política em sua conta da AWS usando [IAM](https://aws.amazon.com/iam/) com as seguintes permissões. Essa política permitirá que você faça upload de arquivos compilados para o seu bucket S3 e invalide os arquivos de distribuição do CloudFront quando enviar um commit. - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "VisualEditor0", - "Effect": "Allow", - "Action": [ - "s3:PutObject", - "s3:ListBucket", - "s3:DeleteObject", - "cloudfront:CreateInvalidation" - ], - "Resource": [ - "", - "arn:aws:s3:::/*", - "arn:aws:s3:::" - ] - } - ] - } - ``` - - :::caution - Não se esqueça de substituir `` e ``. Você pode encontrar o DISTRIBUTION_ARN em **CloudFront > Distributions > Details**. - ::: - -2. Crie um novo usuário IAM e anexe a política ao usuário. Isso fornecerá sua `AWS_SECRET_ACCESS_KEY` e `AWS_ACCESS_KEY_ID`. - -3. Adicione este modelo de workflow ao seu repositório em `.github/workflows/deploy.yml` e envie-o para o GitHub. Você precisará adicionar `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `BUCKET_ID`, e `DISTRIBUTION_ID` como "secrets" em seu repositório no GitHub em **Settings** > **Secrets** > **Actions**. Clique em New repository secret para adicioná-los. - - ```yaml - name: Deploy Website - - on: - push: - branches: - - main - - jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-east-1 - - name: Instalar módulos - run: npm ci - - name: Gerar build da aplicação - run: npm run build - - name: Deploy para o S3 - run: aws s3 sync --delete ./dist/ s3://${{ secrets.BUCKET_ID }} - - name: Criar invalidação no Cloudfront - run: aws cloudfront create-invalidation --distribution-id ${{ secrets.DISTRIBUTION_ID }} --paths "/*" - ``` - - :::note - Seu `BUCKET_ID` é o nome do seu bucket S3. Seu `DISTRIBUTION_ID` é o ID de distribuição do CloudFront. Você pode encontrar o ID de distribuição do CloudFront em **CloudFront > Distributions > ID** - ::: - -## Recursos da Comunidade - -- [Faça o deploy do Astro no AWS Amplify (em Inglês)](https://www.launchfa.st/blog/deploy-astro-aws-amplify) -- [Faça o deploy do Astro no Elastic Beanstalk (em Inglês)](https://www.launchfa.st/blog/deploy-astro-aws-elastic-beanstalk) -- [Faça o deploy do Astro no Amazon ECS no AWS Fargate (em Inglês)](https://www.launchfa.st/blog/deploy-astro-aws-fargate) diff --git a/src/content/docs/pt-br/guides/deploy/buddy.mdx b/src/content/docs/pt-br/guides/deploy/buddy.mdx deleted file mode 100644 index eb909b461c0f6..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/buddy.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Faça Deploy do seu Site Astro com Buddy -description: Como fazer o deploy do seu site Astro para web usando Buddy. -type: deploy -i18nReady: true ---- - -Você pode fazer o deploy do seu projeto Astro usando [Buddy](https://buddy.works/), uma solução de continuous deployment que pode fazer o build e push do seu site para muitos diferentes alvos de deploy, incluindo servidores FTP (em Inglês, "File Transfer Protocol") e provedores de hospedagem em nuvem. - -:::note -O Buddy não irá hospedar o seu site. Em vez disso, ele o ajuda a gerenciar o processo de build e a entregar o resultado a uma plataforma de deploy de sua escolha. -::: - -## Como fazer o Deploy - -1. [Crie uma conta no **Buddy**](https://buddy.works/sign-up). -2. Crie um novo projeto e conecte-o com um repositório git (GitHub, GitLab, BitBucket, qualquer repositório Git privado ou você pode usar o Buddy Git Hosting). -3. Adicione um novo pipeline. -4. Nesse novo pipeline adicione um **[Node.js](https://buddy.works/actions/node-js)** action. -5. Nesse action adicione: - - ```bash - npm install - npm run build - ``` - -6. Adicione um deployment action — há muitos para escolher, você pode navegar por eles no [catálogo de actions do Buddy](https://buddy.works/actions). Embora suas configurações possam ser diferentes, lembre-se de definir o **Source path** para `dist`. -7. Clique no botão **Run**. diff --git a/src/content/docs/pt-br/guides/deploy/cleavr.mdx b/src/content/docs/pt-br/guides/deploy/cleavr.mdx deleted file mode 100644 index 00332386341ae..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/cleavr.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Faça deploy do seu Site Astro com Cleavr -description: Como fazer deploy do seu site Astro para seu servidor VPS utilizando Cleavr. -type: deploy -i18nReady: true ---- - -Você pode fazer deploy do seu projeto Astro para seu próprio Servidor Virtual Privado (VPS) utilizando [Cleavr](https://cleavr.io/), uma ferramenta de gerenciamento de deploy de servidores e aplicações. - -:::tip -Veja o [guia para Astro na documentação da Cleavr](https://docs.cleavr.io/guides/astro)! -::: - -## Pré-requisitos - -Para começar, você vai precisar: - -- Uma conta da Cleavr -- Um servidor no seu provedor de VPS utilizando Cleavr - -## Adicione seu site - -1. Na Cleavr, navegue até o servidor no qual você quer adicionar seu projeto Astro. - -2. Selecione **Add Site** e preencha os detalhes para sua aplicação, como o nome de domínio. - -3. Para **App Type**, selecione 'NodeJS Static' ou 'NodeJS SSR' de acordo com a forma que você está configurando sua aplicação Astro. - -4. Para aplicações estáticas, defina **Artifact Folder** como `dist`. - -5. Para aplicações SSR: - - Defina **Entry Point** como `entry.mjs`. - - Defina **Artifact Folder** como `dist/server`. - -6. Selecione **Add** para adicionar o site ao seu servidor. - - -## Configuração e deploy - -1. Assim que seu novo site for adicionado, clique em **Setup and deploy**. - -2. Selecione **VC Profile**, **Repo** e **Branch** para seu projeto Astro. - -3. Faça quaisquer configurações adicionais necessárias para seu projeto. - -4. Clique na aba **Deployments** e então clique em **Deploy**. - -Parabéns, você acaba de fazer deploy da sua aplicação Astro! diff --git a/src/content/docs/pt-br/guides/deploy/clever-cloud.mdx b/src/content/docs/pt-br/guides/deploy/clever-cloud.mdx deleted file mode 100644 index 5e6532b20ba95..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/clever-cloud.mdx +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Publique seu Site Astro na Clever Cloud -description: Como publicar seu site Astro na web com Clever Cloud. -type: deploy -i18nReady: true ---- -import { Tabs, TabItem, Steps } from '@astrojs/starlight/components'; - -[Clever Cloud](https://clever-cloud.com) é uma plataforma de nuvem europeia que oferece serviços automatizados e escaláveis. - -## Configuração do Projeto - -Você pode publicar tanto projetos Astro totalmente estáticos quanto renderizados sob demanda no Clever Cloud. Independentemente do seu modo de `output` ([pré-renderizado ou sob demanda](/pt-br/guides/on-demand-rendering/)), você pode optar por publicar como uma **aplicação estática** que roda usando um _hook_ pós-build, ou como uma **aplicação Node.js**, que funciona prontamente com seu `package.json`. - -### Porta e host - -As aplicações no Clever Cloud ouvem a porta **8080**. Se seu projeto exigir outra configuração, defina sua porta e host do Astro em um dos dois locais: - -1. Nos scripts `package.json`: - - ```json title="package.json" "astro preview --host 0.0.0.0 --port 8080" - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro check && astro build", - "preview": "astro preview --host 0.0.0.0 --port 8080", - "astro": "astro" - } - ``` - -2. No `astro.config.mjs`: - - ```javascript title="astro.config.mjs" - import { defineConfig } from 'astro/config'; - - export default defineConfig({ - server: { - port: 8080, - host: true - } - }); - ``` - - -## Publicar o Astro pelo Console - -Para publicar seu projeto Astro na Clever Cloud, você precisará **criar uma nova aplicação**. O assistente de aplicação lhe guiará pelas etapas necessárias de configuração. - - - -1. No menu lateral, clique em **Criar** > **Uma aplicação**. -2. Escolha como publicar: - - - **Criar um novo app**: para publicar a partir de um repositório local com Git - - ou - - - **Selecionar um repositório GitHub**: para publicar do GitHub - -3. Selecione uma aplicação **Node.js** ou uma **estática**. -4. Configure o tamanho mínimo para sua instância e as opções de escalabilidade. Sites Astro podem geralmente ser implantados usando a instância **Nano**. Dependendo das especificações e dependências do seu projeto, você pode precisar ajustar isso conforme analisa as métricas na página de **Visão Geral**. -5. Selecione uma **região** para implantar sua instância. -6. Pule a etapa de [conectar **Add-ons** à sua aplicação Clever](https://developers.clever-cloud.com/doc/addons/), a menos que você esteja usando um banco de dados ou Keycloak. -7. Injete **variáveis de ambiente**: - - - Para **Node.js**, nenhuma variável de ambiente específica é necessária para publicar o Astro se você estiver usando **npm**. Se estiver usando **yarn** ou **pnpm**, defina as seguintes variáveis de ambiente: - - - - ```shell - CC_NODE_BUILD_TOOL="custom" - CC_PRE_BUILD_HOOK="npm install -g pnpm && pnpm install" - CC_CUSTOM_BUILD_TOOL="pnpm run astro telemetry disable && pnpm build" - CC_RUN_COMMAND="pnpm run preview" - ``` - - - ```shell - CC_NODE_BUILD_TOOL="yarn" - CC_PRE_BUILD_HOOK="yarn && yarn run astro telemetry disable && yarn build" - CC_RUN_COMMAND="yarn run preview" - ``` - - - - - Para uma aplicação **estática**, adicione essas variáveis: - - - - ```shell - CC_POST_BUILD_HOOK="npm run build" - CC_PRE_BUILD_HOOK="npm install && npm run astro telemetry disable" - CC_WEBROOT="/dist" - ``` - - - ```shell - CC_POST_BUILD_HOOK="pnpm build" - CC_PRE_BUILD_HOOK="npm install -g pnpm && pnpm install && pnpm run astro telemetry disable" - CC_WEBROOT="/dist" - ``` - - - ```shell - CC_POST_BUILD_HOOK="yarn build" - CC_PRE_BUILD_HOOK="yarn && yarn run astro telemetry disable" - CC_WEBROOT="/dist" - ``` - - - - -8. **Publicar!** Se você estiver publicando do **GitHub**, o _deploy_ deve começar automaticamente. Se estiver usando **Git**, copie o _remote_ e faça um push na branch **master**. - - - -:::tip[Outras Branches] -Para publicar de branches diferentes de `master`, use `git push clever :master`. - -Por exemplo, se você quiser publicar sua branch local `main` sem renomeá-la, use `git push clever main:master`. -::: - - -## Recursos Oficiais -- [Documentação Clever Cloud para publicar uma aplicação Node.js](https://developers.clever-cloud.com/doc/applications/javascript/nodejs/) -- [Documentação Clever Cloud para publicar Astro como uma aplicação estática](https://developers.clever-cloud.com/guides/astro/) \ No newline at end of file diff --git a/src/content/docs/pt-br/guides/deploy/cloudflare.mdx b/src/content/docs/pt-br/guides/deploy/cloudflare.mdx deleted file mode 100644 index 691386e555a65..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/cloudflare.mdx +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: Faça deploy do seu site Astro com Cloudflare Pages -description: Como fazer o deploy do seu site Astro para web utilizando Cloudflare Pages. -type: deploy -i18nReady: true ---- - -Você pode fazer o deploy do seu projeto Astro na [Cloudflare Pages](https://pages.cloudflare.com/), uma plataforma para desenvolvedores frontend colaborarem e fazerem deploy de websites estáticos (JAMstack) e SSR. - -Este guia inclui: - -- [Como fazer o deploy através do painel de controle da Cloudflare Pages](#como-fazer-deploy-de-um-site-utilizando-git) -- [Como fazer o deploy utilizando Wrangler, a CLI da Cloudflare](#como-fazer-deploy-de-um-site-utilizando-wrangler) -- [Como fazer o deploy de um site SSR utilizando `@astrojs/cloudflare`](#como-fazer-deploy-de-um-site-ssr) - -## Pré-requisitos - -Para começar, você vai precisar de: - -- Uma conta da Cloudflare. Se você já não tem uma, você pode criar uma conta gratuita da Cloudflare durante o processo. -- O código da sua aplicação em um repositório do [GitHub](https://github.com/) ou [GitLab](https://about.gitlab.com/). - -## Como fazer deploy de um site utilizando Git - -1. Configure um novo projeto na Cloudflare Pages. -2. Faça push do seu código para seu repositório git (GitHub, GitLab). -3. Inicie a sessão no painel de controle da Cloudflare e selecione sua conta em **Account Home** > **Pages**. -4. Selecione **Create a new Project** e a opção **Connect Git**. -5. Selecione o projeto git que você quer fazer deploy e clique **Begin setup**. -6. Use as seguintes configurações de build: - - - **Framework preset**: `Astro` - - **Build command:** `npm run build` - - **Build output directory:** `dist` - -7. Clique no botão **Save and Deploy**. - -## Como fazer deploy de um site utilizando Wrangler - -1. Instale a [CLI Wrangler](https://developers.cloudflare.com/workers/wrangler/get-started/). -2. Autentique Wrangler com sua conta da Cloudflare utilizando `wrangler login`. -3. Execute seu comando de build. -4. Faça o deploy utilizando `npx wrangler pages deploy dist`. - -```bash -# Instale a CLI Wrangler -npm install -g wrangler -# Faça login com a conta da Cloudflare pela CLI -wrangler login -# Execute seu comando de build -npm run build -# Crie um novo deploy -npx wrangler pages deploy dist -``` - -Depois dos seus assets serem enviados, Wrangler irá te dar uma URL de pré-visualização para inspecionar seu site. Quando você entrar no painel de controle da Cloudflare Pages, você verá o seu novo projeto. - -### Habilitando Pré-visualização local com Wrangler - -Para a pré-visualização funcionar, você precisa instalar `wrangler` - -```bash -pnpm add wrangler --save-dev -``` - -Após, é possível atualizar o script "preview" para executar `wrangler` ao invés do comando "preview" integrado do Astro: - - -```json title="package.json" -"preview": "wrangler pages dev ./dist" -``` - -## Como fazer deploy de um site SSR - -Você pode fazer build de um site Astro SSR para deploy na Cloudflare Pages utilizando o [adaptador `@astrojs/cloudflare`](/pt-br/guides/integrations-guide/cloudflare/). - -Siga os passos abaixo para configurar o adaptador. Você pode então fazer o deploy utilizando qualquer uma das abordagens documentadas acima. - -### Instalação Rápida - -Adicione o adaptador para Cloudflare para habilitar SSR no seu projeto Astro com o seguinte comando `astro add`. Ele irá instalar o adaptador e fazer as mudanças apropriadas ao seu arquivo `astro.config.mjs` em uma etapa. - -```bash -npx astro add cloudflare -``` - -### Instalação Manual - -Se você prefere instalar o adaptador manualmente, complete as duas seguintes etapas: - -1. Adicione o adaptador `@astrojs/cloudflare` nas dependências do seu projeto utilizando seu gerenciador de pacotes de preferência. Se você estiver utilizando npm ou não tem certeza, execute isso no terminal: - - ```bash - npm install @astrojs/cloudflare - ``` - -2. Adicione o seguinte no seu arquivo `astro.config.mjs`: - - ```js title="astro.config.mjs" ins={2, 5-6} - import { defineConfig } from 'astro/config'; - import cloudflare from '@astrojs/cloudflare'; - - export default defineConfig({ - output: 'server', - adapter: cloudflare() - }); - ``` - -### Modos - -Há atualmente dois modos suportados ao utilizar Pages Functions com o adaptador [`@astrojs/cloudflare`](https://github.com/withastro/astro/tree/main/packages/integrations/cloudflare#readme). - -1. Modo **Advanced**: Este modo é utilizado quando você quer executar sua função no modo `advanced` que pega o `_worker.js` em `dist`, ou um modo diretório onde as páginas irão compilar o worker para fora de um diretório functions na raiz do projeto. - - Se nenhum modo for definido, o padrão é `"advanced"`. - -2. Modo **directory**: Este modo é utilizado quando você quer executar sua função no modo `directory`, que significa que o adaptador irá compilar a parte do cliente da sua aplicação da mesma forma, porém ele irá mover o script do worker para um diretório `functions` na raiz do projeto. O adaptador irá colocar apenas uma `[[path]].js` naquele diretório, te permitindo adicionar plugins e middleware de páginas que podem ser verificados em controle de versão. - - ```ts title="astro.config.mjs" "directory" - export default defineConfig({ - adapter: cloudflare({ mode: "directory" }), - }); - ``` - -### Utilizando Pages Functions - -[Pages Functions](https://developers.cloudflare.com/pages/platform/functions/) te permitem executar código server-side para habilitar funcionalidade dinâmica sem executar um servidor dedicado. - -Para começar, crie um diretório `/functions` na raiz do seu projeto. Escrevendo seus arquivos Functions nesse diretório automaticamente gera um Worker com funcionalidade customizada nas rotas pré-designadas. Para aprender mais sobre como escrever Functions, veja a [documentação de Pages Functions](https://developers.cloudflare.com/pages/platform/functions/). - -📚 Leia mais sobre [SSR no Astro](/pt-br/guides/on-demand-rendering/). - -## Solução de Problemas - -Se você estiver encontrando erros, verifique novamente se a versão do `node` que você está utilizando localmente (`node -v`) é igual a versão que você está especificando na variável de ambiente. - -Cloudflare requer [Node v16.13](https://miniflare.dev/get-started/cli#installation), que é uma versão mais recente que o mínimo por padrão do Astro, então verifique novamente que você está utilizando pelo menos a v16.13. - -Hidratação no lado do cliente pode falhar como resultado da opção Auto Minify da Cloudflare. Se você ver `Hydration completed but contains mismatches` no console, certifique-se de desabilitar Auto Minify nas configurações da Cloudflare. diff --git a/src/content/docs/pt-br/guides/deploy/deno.mdx b/src/content/docs/pt-br/guides/deploy/deno.mdx deleted file mode 100644 index 1ddd2c756e8fb..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/deno.mdx +++ /dev/null @@ -1,175 +0,0 @@ ---- -title: Faça deploy do seu site Astro com Deno -description: Como fazer o deploy do seu site Astro para web utilizando Deno. -type: deploy -i18nReady: true ---- - -Você pode fazer deploy de um site Astro renderizado no servidor para o [Deno Deploy](https://deno.com/deploy), um sistema distribuído que executa JavaScript, TypeScript e WebAssembly na edge globalmente. - -Este guia inclui instruções para fazer deploy para o Deno Deploy através de GitHub Actions ou da CLI do Deno Deploy. - -## Requisitos - -Este guia assume que você já tem [Deno](https://deno.land/) instalado. - -## Configuração do Projeto - -Seu projeto Astro pode ter deploy feito no [Deno Deploy][Deno adapter] como um site renderizado no lado do servidor (SSR). Deno Deploy não suporta sites estáticos. - -### Adaptador para SSR - -Para habilitar SSR no seu projeto Astro para fazer deploy no Deno Deploy: - -Adicione [o adaptador para Deno][Deno adapter] para habilitar SSR no seu projeto Astro com o seguinte comando `astro add`. Ele irá instalar o adaptador e fazer as mudanças apropriadas para seu arquivo `astro.config.mjs` de uma vez. - -```bash -npx astro add deno -``` - -Se você prefere instalar o adaptador manualmente, complete as duas etapas a seguir: - - 1. Instale [o adaptador `@deno/astro-adapter`](https://github.com/withastro/astro/tree/main/packages/integrations/deno) nas dependências do seu projeto utilizando seu gerenciador de pacotes de preferência. Se você estiver utilizando npm ou não tiver certeza, execute isso no terminal: - - ```bash - npm install @deno/astro-adapter - ``` - -1. Atualize o arquivo de configuração do seu projeto `astro.config.mjs` com as mudanças abaixo. - - ```js ins={3,6-7} - // astro.config.mjs - import { defineConfig } from 'astro/config'; - import deno from '@deno/astro-adapter'; - - export default defineConfig({ - output: 'server', - adapter: deno(), - }); - ``` - - Em seguida, atualize seu script `preview` em `package.json` com as mudanças abaixo. - - ```json del={8} ins={9} - // package.json - { - // ... - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview" - "preview": "deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs" - } - } - ``` - - Você agora pode utilizar esse comando para pré-visualizar seu site Astro em produção localmente com Deno. - - ```bash - npm run preview - ``` - -## Como fazer o deploy - -Você pode fazer o deploy para o Deno Deploy através de GitHub Actions ou utilizando a CLI (interface de linha de comando) do Deno Deploy. - -### Deploy por GitHub Actions - -Se o seu projeto está armazenado no GitHub, o [website do Deno Deploy](https://dash.deno.com/) irá te guiar em como configurar o GitHub Actions para fazer deploy do seu site Astro. - -1. Faça push do seu código para um repositório público ou privado do GitHub. - -1. Inicie sua sessão no [Deno Deploy](https://dash.deno.com/) com sua conta do GitHub e clique em [New Project](https://dash.deno.com). - -1. Selecione seu repositório, a branch do qual você quer que o deploy e selecione o modo **GitHub Action**. (Seu site Astro requer uma etapa de build e portanto não pode utilizar o modo automático.) - -1. No seu projeto Astro, crie um novo arquivo em `.github/workflows/deploy.yml` e copie o YAML abaixo. Isso é similar ao YAML dado pelo Deno Deploy, com as etapas adicionais necessárias para seu site Astro. - - ```yaml - name: Deploy - on: [push] - - jobs: - deploy: - name: Deploy - runs-on: ubuntu-latest - permissions: - id-token: write # Necessário para se autenticar com o Deno Deploy - contents: read # Necessário para clonar o repositório - - steps: - - name: Clone repository - uses: actions/checkout@v4 - - # Não está utilizando npm? Mude `npm ci` para `yarn install` ou `pnpm i` - - name: Install dependencies - run: npm ci - - # Não está utilizando npm? Mude `npm run build` para `yarn build` ou `pnpm run build` - - name: Build Astro - run: npm run build - - - name: Upload to Deno Deploy - uses: denoland/deployctl@v1 - with: - project: my-deno-project # TODO: replace with Deno Deploy project name - entrypoint: server/entry.mjs - root: dist - ``` - -1. Após fazer o commit deste arquivo YAML e fazer o push para o GitHub na sua branch configurada para deploy, o deploy deve começar automaticamente! - - Você pode verificar o progresso utilizando a aba "Actions" na página do seu repositório do GitHub ou no [Deno Deploy](https://dash.deno.com). - - -### Deploy pela CLI - -1. Instale a [CLI do Deno Deploy](https://deno.com/deploy/docs/deployctl). - - ```bash - deno install --allow-read --allow-write --allow-env --allow-net --allow-run --no-check -r -f https://deno.land/x/deploy/deployctl.ts - ``` - -1. Execute a etapa de build do Astro. - - ```bash - npm run build - ``` - -1. Execute `deployctl` para fazer o deploy! - - No comando abaixo, substitua `` com seu [Personal Access Token](https://dash.deno.com/user/access-tokens) e `` com o nome do seu projeto do Deno Deploy. - - ```bash - DENO_DEPLOY_TOKEN= deployctl deploy --project= --no-static --include=./dist ./dist/server/entry.mjs - ``` - - Você pode ver todos os seus deploys em [Deno Deploy](https://dash.deno.com). - -1. (Opcional) Para simplificar a build e o deploy em um só comando, adicione um script `deploy-deno` em `package.json`. - - ```json ins={9} - // package.json - { - // ... - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "deno run --allow-net --allow-read --allow-env ./dist/server/entry.mjs", - "deno-deploy": "npm run build && deployctl deploy --project= --no-static --include=./dist ./dist/server/entry.mjs" - } - } - ``` - - Então você poderá utilizar este comando para fazer a build e deploy do seu projeto Astro em uma etapa. - - ```bash - DENO_DEPLOY_TOKEN= npm run deno-deploy - ``` - - -📚 Leia mais sobre [SSR no Astro](/pt-br/guides/on-demand-rendering/). - -[Deno adapter]: https://github.com/denoland/deno-astro-adapter diff --git a/src/content/docs/pt-br/guides/deploy/flightcontrol.mdx b/src/content/docs/pt-br/guides/deploy/flightcontrol.mdx deleted file mode 100644 index 822f56934051c..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/flightcontrol.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Faça deploy do seu site Astro para a AWS com Flightcontrol -description: Como fazer deploy do seu site Astro para a AWS com Flightcontrol -type: deploy -i18nReady: true ---- - -Você pode fazer deploy de um site Astro utilizando [Flightcontrol](https://www.flightcontrol.dev?ref=astro), que fornece deploys completamente automatizados para sua conta da AWS. - -Suporta sites Astro tanto estáticos como SSR. - -## Como fazer o deploy - -1. Crie uma conta da Flightcontrol em [app.flightcontrol.dev/signup](https://app.flightcontrol.dev/signup?ref=astro) -2. Vá para [app.flightcontrol.dev/projects/new/1](https://app.flightcontrol.dev/projects/new/1) -3. Conecte sua conta do GitHub e selecione seu repositório -4. Selecione sua "Config Type" desejada: - - `GUI` (toda a configuração gerenciada pelo painel de controle da Flightcontrol) onde você vai selecionar a predefinição `Astro Static` ou `Astro SSR` - - `flightcontrol.json` (opção "infrastructure as code" onde toda a configuração está no seu repositório) onde você irá selecionar uma configuração para Astro de exemplo e então adicioná-la a sua base de código como `flightcontrol.json` -5. Ajuste qualquer configuração conforme necessário -6. Clique em "Create Project" e complete quaisquer etapas obrigatórias como vincular sua conta da AWS. - - -### Configuração para SSR - -Para fazer deploy com suporte a SSR, certifique-se de que você configurou o adaptador [`@astro/node`](/pt-br/guides/integrations-guide/node/). Então, siga as etapas acima escolhendo as configurações apropriadas para o SSR do Astro. - diff --git a/src/content/docs/pt-br/guides/deploy/flyio.mdx b/src/content/docs/pt-br/guides/deploy/flyio.mdx deleted file mode 100644 index 290cc8f28571b..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/flyio.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Faça o deploy do seu site Astro no Fly.io -description: Como fazer o deploy do seu site Astro para a web usando Fly.io. -type: deploy -i18nReady: true -stub: true ---- - -Você pode fazer o deploy do seu projeto Astro no [Fly.io](https://fly.io/), uma plataforma para executar aplicativos full stack e bancos de dados próximos aos seus usuários. - -## Configuração do projeto - -Seu projeto Astro pode ser implantado no Fly.io como um site estático ou como um site renderizado no lado do servidor (SSR). - -### Site estático - -Seu projeto Astro é um site estático por padrão. Você não precisa de nenhuma configuração extra para fazer o deploy de um site estático do Astro no Fly.io. - -### Adaptador para SSR - -Para ativar a renderização sob demanda em seu projeto Astro e fazer o deploy no Fly.io, adicione [o adaptador Node.js](/pt-br/guides/integrations-guide/node/). - -## Como fazer o deploy - -1. [Registre-se no Fly.io](https://fly.io/docs/getting-started/log-in-to-fly/#first-time-or-no-fly-account-sign-up-for-fly) se ainda não o fez. -2. [Instale o `flyctl`](https://fly.io/docs/hands-on/install-flyctl/), seu centro de comando da aplicação Fly.io. -3. Execute o seguinte comando em seu terminal. - - ```bash - fly launch - ``` - - O `flyctl` detectará automaticamente o Astro, definirá as configurações corretas, criará sua imagem e fará o deploy na plataforma do Fly.io. - -## Gerando seu Dockerfile do Astro - -Se você ainda não tiver um Dockerfile, o `fly launch` gerará um para você, além de preparar um arquivo `fly.toml`. Para projetos `server` ou `hybrid`, esse Dockerfile incluirá o comando de inicialização e as variáveis de ambiente apropriadas. - - -Em vez disso, você pode criar seu próprio Dockerfile usando um [gerador de Dockerfile](https://www.npmjs.com/package/@flydotio/dockerfile) e, em seguida, executar usando o comando `npx dockerfile` para aplicações Node ou `bunx dockerfile` para aplicações Bun. - -## Recursos oficiais - -- Confira [a documentação oficial do Fly.io](https://fly.io/docs/js/frameworks/astro/) diff --git a/src/content/docs/pt-br/guides/deploy/github.mdx b/src/content/docs/pt-br/guides/deploy/github.mdx deleted file mode 100644 index 1f491ccc455d3..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/github.mdx +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Faça o deploy do seu site Astro no GitHub Pages -description: Como fazer o deploy do seu site Astro para a web no GitHub Pages. -type: deploy -i18nReady: true ---- - -Você pode usar o [GitHub Pages](https://pages.github.com/) para hospedar o seu site Astro diretamente do seu repositório no [GitHub.com](https://github.com/). - -## Como fazer o deploy - -Você pode fazer o deploy através de [GitHub Actions](https://github.com/features/actions) para automaticamente gerar o build e fazer o deploy do seu site. Para isso, o seu código-fonte precisa estar hospedado no GitHub. - -O Astro mantém oficialmente o `withastro/action` para fazer o deploy do seu projeto com pouquíssima configuração. Siga as instruções abaixo para realizar o deploy do seu site Astro no GitHub Pages, e leia o [README do pacote](https://github.com/withastro/action) se você precisa de mais informações. - -1. Defina as opções de [`site`](/pt-br/reference/configuration-reference/#site) e, se necessário, [`base`](/pt-br/reference/configuration-reference/#base) em `astro.config.mjs`. - - ```js title="astro.config.mjs" ins={4-5} - import { defineConfig } from 'astro/config'; - - export default defineConfig({ - site: 'https://astronaut.github.io', - base: '/meu-repositorio', - }); - ``` - - - `site` deve ser `https://.github.io` ou `https://meu-dominio-personalizado.com` - - `base` deve ser o nome do seu repositório após uma barra para frente, por exemplo `/meu-repositorio`. Isso para que o Astro posso entender que a raiz do seu site está em `/meu-repositorio`, em vez do padrão `/`. - - :::note - Não defina o parâmetro `base` se: - - - Sua página for servida do diretório raiz. - - Seu repositório está localizado em `https://github.com//.github.io`. - - Você está usando um domínio personalizado. - ::: - - :::caution - Se você não tinha determinado um valor de `base` anteriormente, e só está configurando esse valor para fazer o deploy pelo GitHub, você deve atualizar os links internos das páginas para incluir `base`. - - ```astro - Sobre - ``` - ::: - -2. Crie um novo arquivo no seu projeto em `.github/workflows/deploy.yml` e cole o YAML abaixo. - - ```yaml title="deploy.yml" - name: GitHub Pages Astro CI - - on: - # Ativa o workflow toda vez que você fizer um push para a branch `main` - # Usando um nome de branch diferente? Modifique `main` para o nome da sua branch - push: - branches: [main] - # Permite que esse workflow seja executado manualmente da aba "Actions" no GitHub. - workflow_dispatch: - - # Permite que este job clone o repositório e crie uma página de deploy - permissions: - contents: read - pages: write - id-token: write - - jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout your repository using git - uses: actions/checkout@v4 - - name: Install, build, and upload your site - uses: withastro/action@v1 - # with: - # path: . # A localização da pasta raiz do seu projeto Astro dentro do seu repositório. (opcional) - # node-version: 18 # A versão específica do Node que deve ser utilizada para a build do seu site. A versão padrão é a 18. (opcional) - # package-manager: pnpm@latest # O gerenciador de pacotes usado para instalar as dependências e fazer a build do site. É automaticamente detectado a partir da sua lockfile. (opcional) - - deploy: - needs: build - runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v1 - ``` - - :::note - A action do Astro aceita alguns parâmetros opcionais. Esses podem ser definidos removendo o comentário da linha que começa com `with:` e do parâmetro que você deseja usar. - ::: - - :::caution - A [action](https://github.com/withastro/action) oficial do Astro escaneia por uma lockfile para detectar o seu gerenciador de pacotes favorito (`npm`, `yarn`, 'pnpm` ou `bun`). Você deve realizar o commit do `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml` ou `bun.lockb` criado automaticamente pelo seu gerenciador de pacotes favorito no seu repositório. - ::: - -3. No GitHub, vá para a aba **Settings** do seu repositório e encontre a seção **Pages** das configurações. - -4. Escolha **GitHub Actions** como a **Source** do seu site. - -5. Faça o commit do novo arquivo de workflow e faça push para o GitHub. - -O seu site deve estar publicado agora! Quando você fizer push de mudanças para o repositório do seu projeto Astro, a Action do GitHub irá fazer deploy delas automaticamente para você. - -:::tip[Configure um domínio personalizado] -Você pode opcionalmente configurar um domínio personalizado adicionando o arquivo `./public/CNAME` a seguir no seu projeto: - -```js title="public/CNAME" -meu.subdominio.com -``` - -Isso vai realizar o deploy do seu site no seu domínio personalizado ao invés de `usuario.github.io`. Não se esqueça de também [configurar o DNS no seu provedor de domínios](https://docs.github.com/pt/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site#configuring-a-subdomain). -::: diff --git a/src/content/docs/pt-br/guides/deploy/gitlab.mdx b/src/content/docs/pt-br/guides/deploy/gitlab.mdx deleted file mode 100644 index 79853a0c37ca6..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/gitlab.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Faço o deploy do seu site Astro no GitLab Pages -description: Como fazer o deploy do seu site Astro para a web no GitLab Pages. -type: deploy -i18nReady: true ---- - -Você pode usar o [GitLab Pages](https://pages.gitlab.io/) para hospedar um site Astro para seu projeto, grupo ou conta de usuário do [GitLab](https://about.gitlab.com/). - -:::tip[Procurando por um exemplo?] -Veja o [exemplo oficial de um projeto Astro no GitLab Pages](https://gitlab.com/pages/astro)! -::: - -## Como fazer o deploy - -1. Defina a opção `site` corretamente em `astro.config.mjs`. -2. Defina `outDir:public` em `astro.config.mjs`. Essa opção instrui o Astro a colocar o resultado estático da build do site em um diretório chamado `public`, que é o local exigido pelo GitLab Pages para arquivos expostos. - - Se você estava usando o [diretório `public/`](/pt-br/basics/project-structure/#public) como fonte de arquivos estáticos em seu projeto Astro, renomeie o diretório e defina `publicDir` com o novo nome em `astro.config.mjs`. - - Por exemplo, aqui estão as configurações corretas de `astro.config.mjs` quando o diretório `public/` é renomeado para `static/`: - - ```js - import { defineConfig } from 'astro/config'; - - export default defineConfig({ - sitemap: true, - site: 'https://astro.build/', - outDir: 'public', - publicDir: 'static', - }); - ``` - -3. Crie um novo arquivo chamado `.gitlab-ci.yml` na raiz do seu projeto com o conteúdo abaixo. Assim será realizado a build e o deploy do seu site sempre que você modificar seu conteúdo: - - ```yaml - # A imagem do Docker que será utilizada para a build da sua aplicação - image: node:lts - - pages: - cache: - paths: - - node_modules/ - script: - # Especifique as etapas necessárias para a build da sua aplicação aqui - - npm install - - npm run build - - artifacts: - paths: - # O diretório que possui os arquivos construídos a serem publicados. - # Precisa ser chamado de "public" - - public - - only: - # Inicia uma nova build e deploy somente quando há um push - # na(s) branch(es) abaixo - - main - ``` diff --git a/src/content/docs/pt-br/guides/deploy/google-cloud.mdx b/src/content/docs/pt-br/guides/deploy/google-cloud.mdx deleted file mode 100644 index d6babe1d5b493..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/google-cloud.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Faça deploy do seu Site Astro no Google Cloud -description: Como fazer deploy do seu site Astro usando Google Cloud. -type: deploy -i18nReady: true ---- - -[Google Cloud](https://cloud.google.com/) é uma plataforma de hospedagem de aplicativos web completa que pode ser usada para fazer deploy do seu site Astro. - -## Como fazer o deploy - -### Cloud Storage (somente estático) - -1. [Crie um novo projeto GCP](https://console.cloud.google.com/projectcreate), ou selecione um que você já tenha. - -2. Crie um novo bucket em [Cloud Storage](https://cloud.google.com/storage). - -3. Dê um nome e outras configurações necessárias. - -4. Faça upload de sua pasta `dist` para ele ou faça upload usando o [Cloud Build](https://cloud.google.com/build). - -5. Habilite o acesso público adicionando uma nova permissão, chamada `Storage Object Viewer`, ao `allUsers`. - -6. Edite a configuração do site e adicione `ìndex.html` como entrypoint e `404.html` como página de erro. - -### Cloud Run (SSR e estático) - -Cloud Run é uma plataforma serverless que permite você executar um container sem ter que gerenciar nenhuma infraestrutura. Ele pode ser usado para fazer deploy tanto de sites estáticos como de sites SSR. - -#### Prepare o Serviço - -1. [Crie um novo projeto GCP](https://console.cloud.google.com/projectcreate), ou selecione um que você já tenha. - -2. Confira que o [Cloud Run API](https://console.cloud.google.com/apis/library/run.googleapis.com) está habilitado. - -3. Crie um novo serviço. - - -#### Crie um DockerFile & Construa o Container - -Antes de vocês poder fazer deploy do seu site com Astro para o Cloud Run, você precisa criar um Dockerfile que vai ser usado para construir o container. Veja mais informações sobre [como usar Docker com Astro](/pt-br/recipes/docker/#criando-um-dockerfile) em nossa seção de receitas. - -Com o Dockerfile criado, faça sua build dele para uma imagem e o push para o Google Cloud. Existem algumas formas de conseguir isso: - -**Faça a build localmente usando Docker**: - -Use o comando `docker build` para fazer a build da imagem, `docker tag` para dar uma etiqueta a ela, e então `docker push` para colocá-la em um registro. No caso do Google Cloud, o [`Google Cloud Registry`](https://cloud.google.com/container-registry/docs/pushing-and-pulling#add-registry) é a opção mais fácil, mas você também pode usar o [Docker Hub](https://hub.docker.com/). - -```bash -# faz a build do seu container -docker build . - -docker tag SOURCE_IMAGE HOSTNAME/PROJECT-ID/TARGET-IMAGE:TAG - -# Coloca sua imagem em um registro -docker push HOSTNAME/PROJECT-ID/IMAGE:TAG -``` - -Mude os seguintes valores nos comandos acima para condizer com seu projeto: - -- `SOURCE_IMAGE`: o nome ou ID da imagem local. -- `HOSTNAME`: a hospedagem do registro (`gcr.io`, `eu.gcr.io`, `asia.gcr.io`, `us.gcr.io`). -- `PROJECT`: o ID do seu projeto do Google Cloud. -- `TARGET-IMAGE`: o nome que a imagem terá ao ser armazenada no registro. -- `TAG` é a versão associada com a imagem. - - -[Leia mais na documentação do Google Cloud.](https://cloud.google.com/container-registry/docs/pushing-and-pulling) - -**Usando outra ferramenta**: - -Você pode usar uma ferramenta de CI/CD que suporte Docker, como o [GitHub Actions](https://github.com/marketplace/actions/push-to-gcr-github-action). - -**Faça a build usando [Cloud Build](https://cloud.google.com/build)**: - -Ao invés de fazer a build do Dockerfile localmente, você pode instruir o Google Cloud para fazer a build da imagem remotamente. Veja a [documentação de Build do Google Cloud aqui](https://cloud.google.com/build/docs/build-push-docker-image). - -#### Fazendo deploy do container - -O deploy pode ser lidado manualmente no seu terminal [usando `gcloud`](https://cloud.google.com/run/docs/deploying#service) ou automaticamente usando [Cloud Build](https://cloud.google.com/build) ou qualquer outro sistema de CI/CD. - -:::note[Precisa de acesso público?] -Não se esqueça de adicionar a permissão `Cloud Run Invoker` para o grupo `allUsers` nas configurações de permissão do Cloud Run! -::: diff --git a/src/content/docs/pt-br/guides/deploy/google-firebase.mdx b/src/content/docs/pt-br/guides/deploy/google-firebase.mdx deleted file mode 100644 index 22a78a69a0a64..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/google-firebase.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Faça o deploy do seu site Astro para o Google Firebase Hosting -description: Como fazer o deploy do seu site Astro usando o Google Firebase Hosting. -type: deploy -i18nReady: true ---- - -[Firebase Hosting](https://firebase.google.com/products/hosting) é uma serviço provido pela plataforma de desenvolvimento de aplicativos da Google, chamado [Firebase](https://firebase.google.com/), que pode ser usado para fazer o deploy de um site Astro. - -Veja nosso guia separado para [adicionar serviços backend do Firebase](/pt-br/guides/backend/google-firebase/) como banco de dados, autenticação e armazenamento. - -## Como fazer o deploy - -1. Verifique se o [firebase-tools](https://www.npmjs.com/package/firebase-tools) está instalado. - -2. Crie os arquivos `firebase.json` e `.firebaserc` na raiz do seu projeto com os seguintes conteúdos: - - `firebase.json`: - - ```json - { - "hosting": { - "public": "dist", - "ignore": [] - } - } - ``` - - `.firebaserc`: - - ```json - { - "projects": { - "default": "" - } - } - ``` - -3. Depois de executar `npm run build`, faça o deploy usando o comando `firebase deploy`. diff --git a/src/content/docs/pt-br/guides/deploy/heroku.mdx b/src/content/docs/pt-br/guides/deploy/heroku.mdx deleted file mode 100644 index d25426a20e5b1..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/heroku.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Faça deploy do seu site Astro com Heroku -description: Como fazer deploy do seu site Astro para a web utilizando Heroku. -type: deploy -i18nReady: true ---- - -[Heroku](https://www.heroku.com/) é uma plataforma-como-serviço para construção, execução e gerenciamento de aplicações modernas na nuvem. Você pode fazer o deploy de um site Astro para a Heroku utilizando este guia. - -## Como fazer o deploy - -1. Instale a [CLI da Heroku](https://devcenter.heroku.com/articles/heroku-cli). - -2. Crie uma conta da Heroku [se registrando](https://signup.heroku.com/). - -3. Execute `heroku login` e preencha suas credenciais da Heroku: - - ```bash - $ heroku login - ``` - -4. Crie um arquivo chamado `static.json` na raiz do seu projeto com o conteúdo abaixo: - - `static.json`: - - ```json - { - "root": "./dist" - } - ``` - - Esta é a configuração do seu site; leia mais sobre em [heroku-buildpack-static](https://github.com/heroku/heroku-buildpack-static). - -5. Configure o seu git remote da Heroku: - - ```bash - # mudança de versão - $ git init - $ git add . - $ git commit -m "Meu site está pronto para o deploy." - - # cria uma nova aplicação com o nome especificado - $ heroku apps:create exemplo - - # define buildpack para sites estáticos - $ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-static.git - ``` - -6. Faça deploy do seu site: - - ```bash - # publica o site - $ git push heroku master - - # abre o navegador para ver a versão em painel de controle da CI da Heroku - $ heroku open - ``` diff --git a/src/content/docs/pt-br/guides/deploy/index.mdx b/src/content/docs/pt-br/guides/deploy/index.mdx deleted file mode 100644 index 1665b38e52df0..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/index.mdx +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Faça deploy do seu site Astro -description: Como fazer deploy do seu site Astro para a web. -i18nReady: true ---- -import DeployGuidesNav from '~/components/DeployGuidesNav.astro'; -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; -import { Steps } from '@astrojs/starlight/components'; - -**Pronto para fazer a build e deploy do seu site Astro?** Siga um dos nossos guias para diferentes serviços de deploy ou role para abaixo para um guia geral sobre como fazer deploy de um site Astro. - -## Guias de Deploy - - - -## Opções de Deploy Rápido - -Você pode fazer build e deploy de um site Astro para diversos hosts rapidamente utilizando ou a UI do painel dessa plataforma ou por uma interface de linha de comando. - -### UI do Website - -Uma forma rápida de fazer deploy do seu website é conectando o repositório Git online (e.x. GitHub, GitLab, Bitbucket) de seu projeto Astro a uma provedor de hospedagem e se aproveitando de continuous deployment utilizando o Git. - -Estas plataformas de host automaticamente detectam pushes no repositório fonte do seu projeto Astro, fazem a build do seu site e então fazem o deploy dele para a web em uma URL customizada ou em seu domínio pessoal. Geralmente, para configurar o deployment nessas plataformas você vai acabar seguindo passos como os seguintes: - - -1. Adicione seu repositório para um provedor Git online (por exemplo, GitHub, GitLab, Bitbucket) - -2. Escolha uma host que suporta **continuous deployment** (por exemplo, [Netlify](/pt-br/guides/deploy/netlify/) ou [Vercel](/pt-br/guides/deploy/vercel/)) e importe seu repositório Git como um novo site/projeto. - - Vários hosts comuns vão reconhecer seu projeto como um site Astro e devem escolher as opções de configuração apropriadas para fazer a build e deploy do seu site como indicado abaixo. (Caso contrário, essas configurações podem ser mudadas.) - - :::note[Opções de Deploy] - - **Build Command (Comando de Build):** `astro build` ou `npm run build` - - **Publish directory (Diretório de Publicação):** `dist` - ::: - -3. Clique em "Deploy" e seu novo website será criado em uma URL única daquele host (e.x. `novo-site-astro.netlify.app`). - - -O host será automaticamente configurado para verificar a branch `main` do seu provedor Git por mudanças para então refazer a build e publicação do seu site a cada novo commit. Essas configurações tipicamente podem ser configuradas na UI do painel do seu host. - -### Deploy por Interface de Linha de Comando - -Alguns hosts vão ter suas próprias interfaces de linha de comando (CLI) que você pode instalar globalmente em sua máquina utilizando npm. Geralmente, utilizar uma CLI para fazer deploy se parece com isso: - - -1. Instale a CLI do seu host globalmente, por exemplo: - - - - ```shell - npm install --global netlify-cli - ``` - - - ```shell - pnpm add --global netlify-cli - ``` - - - ```shell - yarn global add netlify-cli - ``` - - - -2. Execute a CLI e siga as instruções para autorização, configuração, etc. - -3. Faça build e então deploy do seu site para seu host - - Vários hosts comuns irão fazer build e deploy do seu site por você. Eles irão geralmente reconhecer o seu projeto como um site Astro, e então escolher as opções de configuração apropriadas para fazer a build e deploy como indicado abaixo. (Caso contrário, essas configurações podem ser mudadas.) - - :::note[Opções de Deploy] - - **Build Command (Comando de Build):** `astro build` ou `npm run build` - - **Publish directory (Diretório de Publicação):** `dist` - ::: - - Outros hosts vão precisar que você [faça build do seu site localmente](#fazendo-build-do-seu-site-localmente) e então faça o deploy utilizando a linha de comando. - - -## Fazendo Build do Seu Site Localmente - -Vários hosts como Netlify e Vercel irão fazer a build do seu site por você e então publicar o resultado da build para a web. Porém, alguns sites vão precisar que você faça a build localmente e então execute o comando de deploy ou faça upload do resultado da build. - -Você também pode desejar fazer a build localmente para visualizar seu site, ou para encontrar possíveis erros e avisos no seu próprio ambiente. - -Execute o comando `npm run build` para fazer build do seu site Astro. - - - - ```shell - npm run build - ``` - - - ```shell - pnpm run build - ``` - - - ```shell - yarn run build - ``` - - - -Por padrão, o resultado da build será colocado em `dist/`. Este local pode ser modificado utilizando a [opção `outDir` da configuração](/pt-br/reference/configuration-reference/#outdir). - -## Adicionando um Adaptador para SSR - -:::note -Antes de fazer deploy do seu site Astro com [SSR (renderização no lado do servidor)](/pt-br/guides/on-demand-rendering/) ativado, certifique-se de que você: - -- Instalou o [adaptador correto](/pt-br/guides/on-demand-rendering/) nas dependências do seu projeto (seja manualmente ou utilizando o comando `astro add` do adaptador, e.x. `npx astro add netlify`). -- [Adicionou o adaptador](/pt-br/reference/configuration-reference/#adapter) na importação e exportação padrão do seu arquivo `astro.config.mjs` ao instalar manualmente. (O comando `astro add` irá tomar conta dessa etapa por você!) -::: diff --git a/src/content/docs/pt-br/guides/deploy/kinsta.mdx b/src/content/docs/pt-br/guides/deploy/kinsta.mdx deleted file mode 100644 index 633d9ba257416..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/kinsta.mdx +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Faça deploy do seu site Astro com Kinsta Application Hosting -description: Como fazer o deploy do seu site Astro para web utilizando Kinsta Application Hosting. -type: deploy -i18nReady: true ---- - -Você pode utilizar a [Kinsta Application Hosting](https://kinsta.com/application-hosting/) para hospedar um site Astro em sua hospedagem na nuvem. - -## Configurando seu projeto Astro - -### Hospedagem estática -:::tip[Procurando por um exemplo?] -Veja o [projeto inicial oficial da Kinsta Application Hosting para Astro](https://github.com/kinsta/hello-world-astro)! -::: - -Para hospedar seu projeto na **Kinsta Application Hosting**, você precisa de: -- Incluir um campo `name` em seu `package.json`. (Pode ser qualquer um e não irá afetar seu deploy.) -- Incluir um script `build` em seu `package.json`. (Seu projeto Astro já deve incluir isso.) -- Instalar o pacote [`serve`](https://www.npmjs.com/package/serve) e definir o script `start` como `serve dist/`. - -Aqui estão as linhas necessárias no seu arquivo `package.json`: -```json title="package.json" {2,5,6} ins={12} "serv dist/" -{ - "name": "qualquerUm", // Isso é obrigatório, mas o valor não importa. - "scripts": { - "dev": "astro dev", - "start": "serve dist/", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "astro": "^2.2.0", - "serve": "^14.0.1" - }, -} -``` - -### SSR -:::top[Procurando por um exemplo?] -Veja o [projeto oficial da Kinsta Application Hosting usando Astro SSR](https://github.com/kinsta/hello-world-astro-ssr)! -::: - -Para hospedar seu projeto na **Kinsta Application Hosting**, você precisa: -- Incluir um atributo `name` no seu `package.json`. (Isso pode ser qualquer nome, e não vai afetar o seu deploy.) -- Incluir um script `build` no seu `package.json`. (Seu projeto com Astro já deve incluir isso.) -- Instalar o pacote [`@astrojs/node`](https://www.npmjs.com/package/@astrojs/node) e definir o script `start` como `node ./dist/server/entry.mjs`. -- Definir o `astro.config.mjs` para utilizar `@astrojs/node` e usar `host: true`. - -Aqui está as linas necessárias no seu arquivo `package.json`: -```json title="package.json" {2,5,6} ins={12} "node ./dist/server/entry.mjs" -{ - "name": "anything", // Esse é obrigatório, mas o valor não importa. - "scripts": { - "dev": "astro dev", - "start": "node ./dist/server/entry.mjs", - "build": "astro build", - "preview": "astro preview", - "astro": "astro" - }, - "dependencies": { - "astro": "^2.2.0", - "@astrojs/node": "^5.1.1" - }, -} -``` - -Aqui estão as linhas necessárias no seu arquivo `astro.config.mjs`: -```js title="astro.config.mjs" - import { defineConfig } from 'astro/config'; - import node from "@astrojs/node"; - - export default defineConfig({ - output: 'server', - adapter: node({ - mode: "standalone" - }), - server: { - host: true - } - }); -``` - -## Como fazer o deploy -Assim que o repositório no GitHub do seu projeto estiver conectado, você pode iniciar deploys manuais para a Kinsta Application Hosting no **MyKinsta Admin Panel**. Você também pode configurar deploys automáticos no seu painel de administrador. - -### Configurando uma nova aplicação Kinsta -1. Vá para o painel de administrador [My Kinsta](https://my.kinsta.com/). -2. Vá para a aba **Applications**. -3. Conecte seu repositório do GitHub. -4. Pressione o botão **Add service** > **Application**. -5. Siga as etapas do assistente. -6. O deploy da sua aplicação foi feito. diff --git a/src/content/docs/pt-br/guides/deploy/microsoft-azure.mdx b/src/content/docs/pt-br/guides/deploy/microsoft-azure.mdx deleted file mode 100644 index 5cb2f48b9e0da..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/microsoft-azure.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Faça deploy do seu site Astro com Microsoft Azure -description: Como fazer o deploy do seu site Astro para web utilizando Microsoft Azure. -type: deploy -i18nReady: true ---- -import { Steps } from '@astrojs/starlight/components'; - -[Azure](https://azure.microsoft.com/) é uma plataforma na nuvem da Microsoft. Você pode fazer deploy do seu site Astro com o serviço [Static Web Apps](https://aka.ms/staticwebapps) da Microsoft Azure. - -Este guia conduz pela publicação do seu site Astro armazenado no GitHub usando Visual Studio Code. Por favor veja os guias Microsoft para usar uma [Azure Pipelines Task](https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-static-web-app-v0?view=azure-pipelines) para outras configurações. - -## Pré-requisitos - -Para seguir este guia você vai precisar de: - -- Uma conta Azure e uma chave de inscrição. Você pode criar uma [conta gratuita Azure aqui](https://azure.microsoft.com/free). -- Seu código publicado no [GitHub](https://github.com/). -- A [Extensão SWA](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurestaticwebapps) no [Visual Studio Code](https://code.visualstudio.com/). - -## Como fazer o deploy - - -1. Abra seu projeto no VS Code. - -2. Abra a extensão Static Web Apps, inicie sua sessão na Azure e clique no botão **+** para criar um novo Static Web App. Será solicitado para você designar qual chave de inscrição utilizar. - -3. Siga o assistente iniciado pela extensão para dar um nome, escolher uma pré-definição de framework e designar a raiz da aplicação (geralmente `/`) e a localização de arquivos construídos `/dist`. O assistente será executado e irá criar uma [GitHub Action](https://github.com/features/actions) no seu repositório em um diretório `.github`. (Esta pasta será automaticamente criada se ela ainda não existir.) - - -A GitHub Action irá fazer deploy da sua aplicação (você pode ver seu progresso na aba Actions do seu repositório no GitHub). Ao ser completado com sucesso, você pode ver sua aplicação no endereço mostrado pela aba de progresso da Extensão SWA clicando no botão **Browse Website** (isso irá aparecer após a GitHub Action ser executada). - -## Erros Conhecidos - -O yaml da GitHub action que foi criado para você assume o uso do node 14. Isso significa que a build do Astro falhará. Para resolver isso atualize o arquivo package.json de seus projetos com o seguinte trecho de código. - -``` - "engines": { - "node": ">=18.0.0" - }, -``` - -## Recursos Oficiais - -- [Documentação Microsoft Azure Static Web Apps](https://learn.microsoft.com/en-us/azure/static-web-apps/) - -## Recursos da Comunidade - -- [Publicando um Website Astro com Azure Static Web Apps](https://www.blueboxes.co.uk/deploying-an-astro-website-to-azure-static-web-apps) -- [Publicando um Site Astro estático com Azure Static Web Apps usando GitHub Actions](https://agramont.net/blog/create-static-site-astro-azure-ssg/#automate-deployment-with-github-actions) diff --git a/src/content/docs/pt-br/guides/deploy/netlify.mdx b/src/content/docs/pt-br/guides/deploy/netlify.mdx deleted file mode 100644 index 3d6b088c5084b..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/netlify.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Faça o deploy do seu site Astro na Netlify -description: Como fazer o deploy do seu site Astro para a web na Netlify. -type: deploy -i18nReady: true ---- -[Netlify](https://netlify.com) oferece hospedagem e serviços de backend serverless para aplicações web e sites estáticos. Qualquer site Astro pode ser hospedado na Netlify! - -Esse guia inclui instruções para fazer o deploy na Netlify através da interface do site ou da CLI da Netlify. - -## Configuração do Projeto - -Você pode fazer o deploy do seu projeto Astro na Netlify de três maneiras diferentes: como um site estático, como um site renderizado no servidor ou como um site renderizado na Edge. - -### Site Estático - -Seu projeto Astro é um site estático por padrão. Você não precisa de nenhuma configuração adicional para fazer o deploy de um site Astro estático na Netlify. - -### Adaptador para SSR - -Para habilitar o SSR em seu projeto Astro e fazer o deploy na Netlify, incluindo uso de funções na Edge pela Netlify: - -Adicione o [adaptador para Netlify](/pt-br/guides/integrations-guide/netlify/) para habilitar o SSR em seu projeto Astro com o comando `astro add` a seguir. Isso irá instalar o adaptador e fazer as alterações apropriadas em seu arquivo `astro.config.mjs` em apenas um passo. - -```bash -npx astro add netlify -``` - -Se preferir instalar o adaptador manualmente, conclua os dois passos a seguir: - -1. Instale o [adaptador `@astrojs/netlify`](https://github.com/withastro/astro/tree/main/packages/integrations/netlify) nas dependências do seu projeto usando seu gerenciador de pacotes preferido. Se você está utilizando o npm ou não tem certeza, execute em seu terminal: - - ```bash - npm install @astrojs/netlify - ``` - -2. Adicione duas novas linhas ao seu arquivo de configuração do projeto `astro.config.mjs`. - - ```js title="astro.config.mjs" ins={2, 5-6} - import { defineConfig } from 'astro/config'; - import netlify from '@astrojs/netlify/functions'; - - export default defineConfig({ - output: 'server', - adapter: netlify(), - }); - ``` - -Você também pode fazer o deploy do seu projeto utilizando Edge Functions da Netlify adicinando `edgeMiddleware: true` na configuração do adaptador Netlify. - - ```diff lang="js" - // astro.config.mjs - import { defineConfig } from 'astro/config'; - import netlify from '@astrojs/netlify/functions'; - export default defineConfig({ - output: 'server', - adapter: netlify({ - + edgeMiddleware: true - }), - }); - ``` - -## Como fazer o deploy - -Você pode fazer o deploy na Netlify através da interface do site ou da CLI (interface de linha de comando) da Netlify. O processo é o mesmo para sites Astro estáticos e SSR. - -### Deploy através da interface do site - -Se o seu projeto está armazenado no GitHub, GitLab, BitBucket ou Azure DevOps, você poderá utilizar a interface do site da Netlify para fazer o deploy do seu site Astro. - -1. Clique em Add a new site em seu [painel de controle da Netlify](https://app.netlify.com/) - -2. Escolha Import an existing project - - Quando você importa seu repositório Astro do seu provedor Git, a Netlify deve detectar e pré-preencher automaticamente as configurações corretas para você. - -3. Certifique-se de que as seguintes configurações foram inseridas, e então clique no botão Deploy: - - - **Build Command:** `astro build` ou `npm run build` - - **Publish directory:** `dist` - -Depois de fazer o deploy você será redirecionado para a página de visão geral do site. Lá você pode editar os detalhes de seu site. - -Quaisquer alterações futuras no seu repositório de origem acionarão deploys de visualização e produção baseados em sua configuração de deploy. - -#### Arquivo `netlify.toml` - -Opcionalmente, você pode criar um arquivo `netlify.toml` na raiz do repositório do seu projeto para configurar o seu comando de build e o diretório de publicação, bem como outras configurações de projeto, incluindo variáveis de ambiente e redirecionamentos. A Netlify lerá este arquivo e configurará automaticamente o seu deploy. - -Para definir as configurações padrão, crie um arquivo `netlify.toml` com o seguinte conteúdo: - -```toml -[build] - command = "npx pnpm install --store=node_modules/.pnpm-store && npm run build" - publish = "dist" -``` - -📚 Mais informações em [“Deploying an existing Astro Git repository”](https://www.netlify.com/blog/how-to-deploy-astro/#deploy-an-existing-git-repository-to-netlify) no blog da Netlify - - -### Deploy pela CLI - -Você também pode criar um site na Netlify e vincular o seu repositório Git instalando e usando a [CLI da Netlify](https://cli.netlify.com/). - - -1. Instale a CLI da Netlify globalmente - - ```bash - npm install --global netlify-cli - ``` - -2. Execute `netlify login` e siga as instruções para fazer login e autorizar a Netlify -3. Execute `netlify init` e siga as instruções -4. Confirme o seu comando de build (`astro build`) - - A CLI detectará automaticamente as configurações de build (`astro build`) e o diretório de deploy (`dist`) e oferecerá a geração automática do [arquivo `netlify.toml`](#arquivo-netlifytoml) com estas configurações. - -5. Faça o build e o deploy fazendo push para o Git - - A CLI adicionará um chave de deploy ao repositório, o que significa que o seu site será reconstruído automaticamente na Netlify toda vez que você executar `git push`. - -📚 Mais detalhes da Netlify em [Deploy an Astro site using the Netlify CLI](https://www.netlify.com/blog/how-to-deploy-astro/#link-your-astro-project-and-deploy-using-the-netlify-cli) - -### Defina uma versão do Node.js - -Se você está usando uma [imagem de build](https://docs.netlify.com/configure-builds/get-started/#build-image-selection) legada (Xenial) na Netlify, certifique-se de que a versão do Node.js está definida. Astro requer `v18.14.1` ou superior. - -Você pode [especificar a versão do Node.js na Netlify](https://docs.netlify.com/configure-builds/manage-dependencies/#node-js-and-javascript) usando: -- um arquivo [`.nvmrc`](https://github.com/nvm-sh/nvm#nvmrc) em seu diretório base. -- a variável de ambiente `NODE_VERSION` na configuração do seu site usando o painel geral da Netlify. - -## Usando as Netlify Functions - -Nenhuma configuração especial é necessária para usar as funções da Netlify com Astro. Adicione o diretório `netlify/functions` na raiz de seu projeto e siga a [documentação das Netlify Functions](https://docs.netlify.com/functions/overview/) para começar! - -## Exemplos - -- [How to deploy an Astro site](https://www.netlify.com/blog/how-to-deploy-astro/) — Blog da Netlify -- [Deploy An Astro site with Forms, Serverless Functions, and Redirects](https://www.netlify.com/blog/deploy-an-astro-site-with-forms-serverless-functions-and-redirects/) — Blog da Netlify -- [Deployment Walkthrough Video](https://youtu.be/GrSLYq6ZTes) — Canal do YouTube da Netlify diff --git a/src/content/docs/pt-br/guides/deploy/render.mdx b/src/content/docs/pt-br/guides/deploy/render.mdx deleted file mode 100644 index 7acca43e35654..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/render.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Faça o deploy do seu site Astro no Render -description: Como fazer o deploy do seu site Astro usando Render. -type: deploy -i18nReady: true ---- - -Você pode fazer deploy do seu projeto Astro no [Render](https://render.com/), um serviço para construir sites com certificados TLS gratuitos, uma CDN global, proteção contra DDoS, redes privadas e deploys automáticos do Git. - -## Como fazer o deploy - -1. Crie uma [conta no render.com](https://dashboard.render.com/) e faça login -2. Clique no botão **New +** em seu dashboard e selecione **Static Site** -3. Conecte seu repositório do [GitHub](https://github.com/) ou [GitLab](https://about.gitlab.com/) ou então insira a URL pública de um repositório público -4. Dê um nome ao seu site, selecione a branch e especifique o comando de build e diretório de publicação - - **build command:** `npm run build` - - **publish directory:** `dist` - - **Environment variables (advanced)**: Por padrão, o Render utiliza Node.js 14.17.0, mas o Astro [requer uma versão maior](/pt-br/install-and-setup/#pré-requisitos). Adicione uma variável de ambiente com uma **Variable key** de `NODE_VERSION` e um **Value** de `18.14.1` ou maior para instruir o Render a usar uma versão compatível do Node.js. Alternativamente, adicione um arquivo [`.node-version`](https://render.com/docs/node-version) ou [`.nvmrc`](https://render.com/docs/node-version) em seu projeto para especificar uma versão do Node.js. -5. Clique no botão **Create Static Site** diff --git a/src/content/docs/pt-br/guides/deploy/sst.mdx b/src/content/docs/pt-br/guides/deploy/sst.mdx deleted file mode 100644 index 7ecbfd2b47110..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/sst.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Faça o deploy do seu site Astro para a AWS com SST -description: Como fazer o deploy do seu site Astro para a AWS com SST -i18nReady: true ---- - -Você pode fazer deploy de um site Astro utilizando [SST](https://sst.dev), um framework open-source para fazer deploy de aplicações completamente serverless para a AWS com suporte a SSG e SSR. - -Você também pode utilizar quaisquer construtos adicionais do SST como Cron Jobs, Buckets, Queues, etc. enquanto mantém segurança de tipos. - -## Início Rápido - -1. Crie um projeto Astro -1. Execute `npx create-sst` -1. Ele irá detectar que você está utilizando Astro e pedirá para você confirmar. -1. Assim que você está pronto para fazer o deploy, você pode executar `npx sst deploy --stage=production` - -Você também pode ver um [vídeo passo a passo desse processo](https://www.youtube.com/watch?v=AFP3ZHxO7Gg) que irá te guiar pelas etapas. - -### Construtos do SST - -Para utilizar quaisquer [construtos adicionais do SST](https://docs.sst.dev/), os adicione em `sst.config.ts`. - -```ts {2} {4} title="sst.config.ts" -app.stack(function Site(ctx) { - const bucket = new Bucket(ctx.stack, "public"); - const site = new AstroSite(ctx.stack, "site", { - bind: [bucket], - }); - - ctx.stack.addOutputs({ - url: site.url, - }); -}); -``` - -E então os acesse em seu arquivo `.astro`. - -```astro ---- -import { Bucket } from "sst/node/bucket" -console.log(Bucket.public.bucketName) ---- -``` - -Consulte a [documentação do SST em Anexação de Recursos](https://docs.sst.dev/resource-binding) para aprender mais. - -Se você tiver perguntas, você pode [perguntar no Discord do SST](https://discord.gg/sst). diff --git a/src/content/docs/pt-br/guides/deploy/surge.mdx b/src/content/docs/pt-br/guides/deploy/surge.mdx deleted file mode 100644 index 895205fd9cd9e..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/surge.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Faça o deploy do seu site Astro no Surge -description: Como fazer o deploy do seu site Astro usando surge.sh -type: deploy -i18nReady: true ---- - -Você pode fazer o deploy do seu projeto Astro para o [Surge](https://surge.sh/), uma plataforma de publicação em um só comando feita para desenvolvedores front-end. - -## Como fazer o deploy - -1. Instale [a CLI do Surge](https://www.npmjs.com/package/surge) globalmente pelo Terminal, se ainda não tiver instalado. - - ```shell - npm install -g surge - ``` - -2. Faça a build do seu site Astro a partir do diretório raiz do seu projeto. - - ```shell - npm run build - ``` - -3. Faça o deploy para o Surge usando a CLI. - - ```shell - surge dist - ``` - -Você pode usar um [domínio customizado](http://surge.sh/help/adding-a-custom-domain) quando fizer o deploy executando `surge dist seu-dominio.com`. diff --git a/src/content/docs/pt-br/guides/deploy/vercel.mdx b/src/content/docs/pt-br/guides/deploy/vercel.mdx deleted file mode 100644 index 4e3dbafaa9d9e..0000000000000 --- a/src/content/docs/pt-br/guides/deploy/vercel.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Faça o deploy do seu site Astro na Vercel -description: Como fazer o deploy do seu site Astro para a web na Vercel. -type: deploy -i18nReady: true ---- - -Você pode usar a [Vercel](http://vercel.com/) para fazer o deploy de um site Astro em sua rede edge global com zero configuração. - -Este guia inclui instruções para fazer o deploy na Vercel através da interface do site ou da CLI da Vercel. - -## Configuração do Projeto - -Você pode fazer o deploy do seu projeto Astro na Vercel como um site estático ou como site renderizado no servidor (SSR). - -### Site Estático - -Seu projeto Astro é um site estático por padrão. Você não precisa de nenhuma configuração adicional para fazer o deploy de um site Astro estático na Vercel. - -### Adaptador para SSR - -Para habilitar o SSR em seu projeto Astro e fazer o deploy na Vercel: - -Adicione o [adaptador para Vercel](/pt-br/guides/integrations-guide/vercel/) para habilitar o SSR em seu projeto Astro com o comando `astro add` a seguir. Isso irá instalar o adaptador e fazer as alterações apropriadas em seu arquivo `astro.config.mjs` em apenas um passo. - -```bash -npx astro add vercel -``` - -Se preferir instalar o adaptador manualmente, conclua os dois passos a seguir: - -1. Instale o [adaptador `@astrojs/vercel`](/pt-br/guides/integrations-guide/vercel/) nas dependências do seu projeto usando seu gerenciador de pacotes preferido. Se você está utilizando o npm ou não tem certeza, execute em seu terminal: - - ```bash - npm install @astrojs/vercel - ``` - -1. Adicione duas novas linhas ao seu arquivo de configuração do projeto `astro.config.mjs`. - - ```js title="astro.config.mjs" ins={2, 5-6} - import { defineConfig } from 'astro/config'; - import vercel from '@astrojs/vercel/serverless'; - - export default defineConfig({ - output: 'server', - adapter: vercel(), - }); - ``` - -## Como fazer o deploy - -Você pode fazer o deploy na Vercel através da interface do site ou da CLI (interface de linha de comando) da Vercel. O processo é o mesmo para sites Astro estáticos e SSR. - -### Deploy através da interface do site - -1. Faça o push do seu código para o seu repositório Git online (GitHub, GitLab, BitBucket). -2. [Importe o seu projeto](https://vercel.com/new) na Vercel. -3. A Vercel vai detectar automaticamente o seu site Astro e irá definir as configurações corretas. -4. O deploy de sua aplicação está feito! (ex. [astro.vercel.app](https://astro.vercel.app/)) - -Depois que seu projeto foi importado e o deploy foi feito, todos os pushs subsequentes para branches vão gerar [Deploys de Visualização](https://vercel.com/docs/concepts/deployments/preview-deployments) e todas as alterações feitas na branch de produção (geralmente “main”) resultarão em um [Deploy de Produção](https://vercel.com/docs/concepts/deployments/environments#production). - -📚 Saiba mais sobre a [Integração da Vercel com o Git](https://vercel.com/docs/concepts/git). - - -### Deploy pela CLI - -1. Instale a [CLI da Vercel](https://vercel.com/cli) e execute `vercel` para fazer o deploy. - - ```bash - npm i -g vercel - vercel - ``` - -2. A Vercel vai detectar automaticamente o seu site Astro e irá definir as configurações corretas. -3. Quando perguntado `Want to override the settings? [y/N]`, escolha `N`. -4. O deploy de sua aplicação está feito! (ex. [astro.vercel.app](https://astro.vercel.app/)) - -### Configuração de projeto com vercel.json - -Você pode utilizar `vercel.json` para sobrescrever o comportamento padrão da Vercel e configurar opções adicionais. Por exemplo, você pode desejar anexar headers a respostas HTTP a partir de seus Deployments. - -📚 Aprenda mais sobre [configuração de projetos da Vercel](https://vercel.com/docs/project-configuration). - -### Atualizando para Astro 2.0 - -Astro v2.0 remove suporte para Node 14, então certifique-se de que seu projeto está utilizando **Node `18.14.1` ou maior**. Você pode [definir a versão do Node.js](https://vercel.com/changelog/node-js-version-now-customizable-in-the-project-settings) usada durante a Etapa de Build e Funções Serverless pela página "General" em "Project Settings". diff --git a/src/content/docs/pt-br/guides/dev-toolbar.mdx b/src/content/docs/pt-br/guides/dev-toolbar.mdx deleted file mode 100644 index 471769d285c91..0000000000000 --- a/src/content/docs/pt-br/guides/dev-toolbar.mdx +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Barra de Ferramentas de Desenvolvimento -description: Um guia para usar a barra de ferramentas de desenvolvimento no Astro -i18nReady: true ---- -import RecipeLinks from "~/components/RecipeLinks.astro"; - -Enquanto o servidor de desenvolvimento estiver em execução, o Astro inclui uma barra de ferramentas de desenvolvimento na parte inferior de cada página na pré-visualização do seu navegador local. - -Essa barra de ferramentas inclui várias ferramentas úteis para depurar e inspecionar seu site durante o desenvolvimento e pode ser [estendida com mais aplicativos da barra de ferramentas de desenvolvimento](#estendendo-a-barra-de-ferramentas-de-desenvolvimento) encontrados no diretório de integrações. Você pode até mesmo [criar seus próprios aplicativos](/pt-br/recipes/making-toolbar-apps/) usando a [API da barra de ferramentas de desenvolvimento](/pt-br/reference/dev-toolbar-app-reference/)! - -Essa barra de ferramentas é habilitada por padrão e aparece quando você passa o mouse sobre a parte inferior da página. Ela é apenas uma ferramenta de desenvolvimento e não aparecerá em seu site publicado. - -## Aplicativos incluídos - -### Menu Astro - -O aplicativo Menu Astro fornece acesso fácil a várias informações sobre o projeto atual e links para recursos adicionais. Em especial, ele fornece acesso com um clique à documentação do Astro, ao repositório do GitHub e ao servidor do Discord. - -Esse aplicativo também inclui um botão "Copy debug info" (Copiar informações de depuração) que executará o comando [`astro info`](/pt-br/reference/cli-reference/#astro-info) e copiará a saída para sua área de transferência. Isso pode ser útil para solicitar ajuda ou relatar problemas. - -### Inspect - -O aplicativo Inspect (Inspecionar) fornece informações sobre todas as [ilhas](/pt-br/concepts/islands/) na página atual. Isso mostrará as propriedades passadas para cada ilha e a diretiva de cliente que está sendo usada para renderizá-las. - -### Audit - -O aplicativo Audit (Auditoria) executa automaticamente uma série de auditorias na página atual, verificando os problemas mais comuns de performance e acessibilidade. Quando um problema for encontrado, um ponto vermelho aparecerá na barra de ferramentas. Ao clicar no aplicativo, uma lista de resultados da auditoria será exibida e os elementos relacionados serão destacados diretamente na página. - -:::note -As auditorias básicas de performance e acessibilidade realizadas pela barra de ferramentas de desenvolvimento não substituem ferramentas dedicadas como [Pa11y](https://pa11y.org/) ou [Lighthouse]() ou, melhor ainda, humanos! - -A barra de ferramentas de desenvolvimento tem como objetivo oferecer uma maneira rápida e fácil de detectar problemas comuns durante o desenvolvimento, sem a necessidade de trocar de contexto para uma ferramenta diferente. -::: - -### Settings - -O aplicativo Settings (Configurações) permite configurar opções para a barra de ferramentas de desenvolvimento, como log detalhado, desativar as notificações e ajustar seu posicionamento na tela. - -## Estendendo a barra de ferramentas de desenvolvimento - -As integrações do Astro podem adicionar novos aplicativos à barra de ferramentas de desenvolvimento, permitindo que você a estenda com ferramentas personalizadas específicas para o seu projeto. Você pode encontrar [mais aplicativos de ferramentas de desenvolvimento para instalar no diretório de integrações](https://astro.build/integrations/?search=&categories%5B%5D=toolbar) ou usando o [Menu Astro](#menu-astro). - -Instale integrações adicionais de aplicativos da barra de ferramentas de desenvolvimento em seu projeto, como qualquer outra [integração do Astro](/pt-br/guides/integrations-guide/), de acordo com suas próprias instruções de instalação. - - - -## Desativando a barra de ferramentas de desenvolvimento - -A barra de ferramentas de desenvolvimento é ativada por padrão em todos os sites. Você pode optar por desativá-la para projetos e/ou usuários individuais, conforme necessário. - -### Por projeto - -Para desativar a barra de ferramentas de desenvolvimento para todos que estiverem trabalhando em um projeto, use `devToolbar: false` no [arquivo de configuração do Astro](/pt-br/reference/configuration-reference/#devtoolbarenabled). - -```js title="astro.config.mjs" ins={4-6} -import { defineConfig } from "astro/config"; - -export default defineConfig({ - devToolbar: { - enabled: false - } -}) -``` - -Para ativar a barra de ferramentas de desenvolvimento novamente, remova essas linhas de sua configuração ou use `enabled:true`. - -### Por usuário - -Para desativar a barra de ferramentas de desenvolvimento somente para você em um projeto específico, execute o comando [`astro preferences`](/pt-br/reference/cli-reference/#astro-preferences). - -```shell -astro preferences disable devToolbar -``` - -Para desativar a barra de ferramentas de desenvolvimento em todos os projetos do Astro para um usuário na máquina atual, adicione a flag `--global` ao executar `astro-preferences`: - -```shell -astro preferences disable --global devToolbar -``` - -A barra de ferramentas de desenvolvimento pode ser ativada posteriormente com: - -```shell -astro preferences enable devToolbar -``` diff --git a/src/content/docs/pt-br/guides/endpoints.mdx b/src/content/docs/pt-br/guides/endpoints.mdx deleted file mode 100644 index 7efa6a9fc3a3f..0000000000000 --- a/src/content/docs/pt-br/guides/endpoints.mdx +++ /dev/null @@ -1,225 +0,0 @@ ---- -title: Endpoints -description: Aprenda a criar endpoints que podem processar todo tipo de dados -i18nReady: true ---- -import RecipeLinks from "~/components/RecipeLinks.astro"; - -O Astro permite que você crie endpoints customizados para servir e processar todo tipo de dados. Isso pode ser usado para gerar imagens, expor um arquivo RSS ou os usar como rotas de API para construir uma API completa para o seu site. - -Em sites gerados de forma estática, seus endpoints customizados são chamados durante a fase de build para produzir arquivos estáticos. Já em sites usando o [modo SSR](/pt-br/guides/on-demand-rendering/) seus endpoints customizados se tornarão endpoints reais executados a cada requisição. Endpoints estáticos e SSR são definidos de maneira similar, mas os endpoints SSR suportam funcionalidades adicionais. - -## Endpoints de Arquivos Estáticos - -Para criar um endpoint customizado, adicione um arquivo `.js` ou `.ts` no diretório `/pages`. A extensão do arquivo será removida durante o processo de build, portanto o nome do arquivo deve conter a extensão que você deseja que os dados usem, por exemplo `src/pages/data.json.ts` se tornará a rota `/data.json`. - -Seus endpoints devem exportar uma função `GET` (opcionalmente assíncrona) que recebe um [objeto de contexto](/pt-br/reference/api-reference/) com propriedades similares a global `Astro`. Aqui, ele retorna um objeto `Response` com um `name` e `url`, que o Astro irá chamar durante a build e utilizar seu conteúdo para gerar o arquivo. - -```ts -// Exemplo: src/pages/builtwith.json.ts -// Se tornará: /builtwith.json -export async function GET({params, request}) { - return new Response( - JSON.stringify({ - name: 'Astro', - url: 'https://astro.build/' - }) - ) -} -``` - -Desde o Astro v3.0, 0 objeto `Response` retornado não tem mais que incluir a propriedade `encoding`. Por exemplo, para produzir uma imagem binária png: - -```ts title="src/pages/builtwith.json.ts" {3} -export async function GET({ params, request }) { - const response = await fetch("https://docs.astro.build/assets/full-logo-light.png"); - return new Response(await response.arrayBuffer()); -} -``` - -Também é possível adicionar validação de tipo à sua função com o tipo `APIRoute`: - -```ts -import type { APIRoute } from 'astro'; - -export const GET: APIRoute = async ({ params, request }) => {...} -``` - -### Roteamento dinâmico e a propriedade `params` - -Os endpoints suportam as mesmas funcionalidades de [roteamento dinâmico](/pt-br/guides/routing/#rotas-dinâmicas) que as páginas. Nomeie seu arquivo com um nome de parâmetro entre colchetes e exporte uma função chamada [`getStaticPaths()`](/pt-br/reference/routing-reference/#getstaticpaths). Assim será possível acessar o parâmetro utilizando a propriedade `params` passada para a função do endpoint. - -```ts title="src/pages/api/[id].json.ts" -import type { APIRoute } from 'astro'; - -const usuarios = ["Sarah", "Chris", "Yan", "Elian"] - -export const GET: APIRoute = ({ params, request }) => { - const id = params.id; - return new Response( - JSON.stringify({ - name: usuarios[id] - }) - ) -} - -export function getStaticPaths() { - return [ - { params: { id: "0"} }, - { params: { id: "1"} }, - { params: { id: "2"} }, - { params: { id: "3"} } - ] -} -``` - -Isso irá gerar quatro endpoints JSON durante a build: `/api/0.json`, `/api/1.json`, `/api/2.json` e `/api/3.json`. O roteamento dinâmico com endpoints funciona da mesma forma que nas páginas, porém, como um endpoint é uma função e não uma página, [props](/pt-br/reference/routing-reference/#passagem-de-dados-com-props) não são suportadas. - -### `request` - -Todos os endpoints recebem uma propriedade `request`, porém no modo estático você só tem acesso a propriedade `request.url`. Ela retorna o URL completo do endpoint atual e funciona da mesma forma que [Astro.request.url](/pt-br/reference/api-reference/#request) funciona em páginas. - -```ts title="src/pages/request-path.json.ts" -import type { APIRoute } from 'astro'; - -export const GET: APIRoute = ({ params, request }) => { - return new Response(JSON.stringify({ - path: new URL(request.url).pathname - }) - ) -} -``` - -## Endpoints do Servidor (Rotas de API) - -Tudo descrito na seção de endpoints de arquivos estáticos também pode ser utilizado no modo SSR: arquivos podem exportar uma função `GET` que recebe um [objeto de contexto](/pt-br/reference/api-reference/) com propriedades similares a global `Astro`. - -Porém, diferente do modo `static`, quando você habilita a renderização sob demanda para uma rota, o endpoint será construído ao ser requisitado. Isso destrava novas funcionalidades que são indisponíveis em tempo de construção, e permite que você construa rotas de API que ouvem a requisições e executam código de maneira segura no servidor em tempo de execução. - -Suas rotas serão renderizadas sob demanda por padrão no modo `server`. No modo `hybrid`, você deve desativar a pré-renderização para cada endpoint personalizado com `export const prerender = false`. - - - -:::note -Certifique-se de [habilitar o modo de renderização sob demanda](/pt-br/guides/on-demand-rendering/) antes de tentar esses exemplos, e desativar a pré-renderização no modo `hybrid`. -::: - -Os endpoints do servidor tem acesso a propriedade `params` sem exportar a função `getStaticPaths` e podem retornar um objeto [`Response`](https://developer.mozilla.org/pt-BR/docs/Web/API/Response), permitindo que você defina códigos de status e cabeçalhos HTTP. - -```js title="src/pages/[id].json.js" -import { getProduct } from '../db'; - -export async function GET({ params }) { - const id = params.id; - const product = await getProduct(id); - - if (!product) { - return new Response(null, { - status: 404, - statusText: 'Não encontrado' - }); - } - - return new Response( - JSON.stringify(product), { - status: 200, - headers: { - "Content-Type": "application/json" - } - } - ); -} -``` - -Esse código responderá a qualquer requisição que corresponda à rota dinâmica. Por exemplo, se navegarmos para `/capacete.json`, `params.id` será `capacete`. Se `capacete` existir no banco de dados, o endpoint irá criar um objeto `Response` para responder com JSON e retornar um [código de status HTTP](https://developer.mozilla.org/en-US/docs/Web/API/Response/status) de sucesso. Caso contrário, ele usará o objeto `Response` para responder com um erro `404`. - -No modo SSR, certos provedores requerem que o cabeçalho `Content-Type` retorne uma imagem. Neste caso, utilize um objeto `Response` para especificar uma propriedade `headers`. Por exemplo, para produzir uma imagem `.png` binária: - -```ts title="src/pages/astro-logo.png.ts" -export async function GET({ params, request }) { - const response = await fetch("https://docs.astro.build/assets/full-logo-light.png"); - const buffer = Buffer.from(await response.arrayBuffer()); - return new Response(buffer, { - headers: { "Content-Type": "image/png" }, - }); -} -``` - -### Métodos HTTP - -Além da função `GET`, você pode exportar uma função com o nome de qualquer [método HTTP](https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Methods). Assim, quando uma requisição for recebida, o Astro irá checar o método e chamar a função correspondente. - -Também é possível exportar uma função `ALL` para corresponder a todos os métodos que já não tenham suas respectivas funções exportadas. Se houver uma requisição sem método correspondente, ela será redirecionada para a sua [página de 404](/pt-br/basics/astro-pages/#página-de-erro-404-personalizada). - -```ts title="src/pages/methods.json.ts" -export const GET: APIRoute = ({ params, request }) => { - return new Response(JSON.stringify({ - message: "Isso foi um GET!" - }) - ) -} - -export const POST: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: "Isso foi um POST!" - }) - ) -} - -export const DELETE: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: "Isso foi um DELETE!" - }) - ) -} - -export const ALL: APIRoute = ({ request }) => { - return new Response(JSON.stringify({ - message: `Isso foi um ${request.method}!` - }) - ) -} -``` - - - -### `request` - -No modo SSR, a propriedade `request` retorna um objeto [`Request`](https://developer.mozilla.org/pt-BR/docs/Web/API/Request) completamente utilizável que se refere a requisição atual. Isso permite que você aceite dados e cheque cabeçalhos: - -```ts title="src/pages/test-post.json.ts" -export const POST: APIRoute = async ({ request }) => { - if (request.headers.get("Content-Type") === "application/json") { - const body = await request.json(); - const name = body.name; - return new Response(JSON.stringify({ - message: "Seu nome é: " + name - }), { - status: 200 - }) - } - return new Response(null, { status: 400 }); -} -``` - -### Redirecionamentos - -O contexto do endpoint exporta um utilitário `redirect()` similar ao `Astro.redirect`: - -```js title="src/pages/links/[id].js" {14} -import { getLinkUrl } from '../db'; - -export async function GET({ params, redirect }) { - const { id } = params; - const link = await getLinkUrl(id); - - if (!link) { - return new Response(null, { - status: 404, - statusText: 'Não encontrado' - }); - } - - return redirect(link, 307); -} -``` diff --git a/src/content/docs/pt-br/guides/environment-variables.mdx b/src/content/docs/pt-br/guides/environment-variables.mdx deleted file mode 100644 index 4e4a46440e05c..0000000000000 --- a/src/content/docs/pt-br/guides/environment-variables.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Usando variáveis de ambiente -description: Aprenda como utilizar variáveis de ambiente em um projeto Astro. -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -Astro utiliza o suporte integrado do Vite para variáveis de ambiente e o deixa [utilizar quaisquer de seus métodos](https://vite.dev/guide/env-and-mode.html) para trabalhar com elas. - -Note que enquanto _todas_ as variáveis de ambiente estão disponíveis em código no lado do servidor, apenas variáveis de ambiente com o prefixo `PUBLIC_` estão disponíveis em código no lado do cliente por segurança. - -```ini title=".env" -SENHA_SECRETA=senha123 -PUBLIC_TODOS=aqui -``` - -Nesse exemplo, `PUBLIC_TODOS` (acessível via `import.meta.env.PUBLIC_TODOS`) estará disponível no código do cliente e do servidor, enquanto `SENHA_SECRETA` (acessível via `import.meta.env.SENHA_SECRETA`) estará apenas no lado do servidor. - -:::caution -Arquivos `.env` não são carregados dentro de [arquivos de configuração](/pt-br/guides/configuring-astro/#variáveis-de-ambiente). -::: - -## Variáveis de ambiente padrões - -Astro inclui algumas variáveis de ambiente por padrão: - -- `import.meta.env.MODE`: O modo no qual o seu site está sendo executado. Seu valor é `development` quando estiver executando `astro dev` e será `production` quando estiver executando `astro build`. -- `import.meta.env.PROD`: `true` se o seu site está sendo executado em produção; `false` caso contrário. -- `import.meta.env.DEV`: `true` se o seu site está sendo executado em desenvolvimento; `false` caso contrário. Sempre o oposto de `import.meta.env.PROD`. -- `import.meta.env.BASE_URL`: A URL base na qual o seu site está sendo servido de. Isso é determinado pela [opção `base` da configuração](/pt-br/reference/configuration-reference/#base). -- `import.meta.env.SITE`: É definida para [a opção `site`](/pt-br/reference/configuration-reference/#site) especificada no `astro.config` do seu projeto. -- `import.meta.env.ASSETS_PREFIX`: O prefixo para links de assets gerados pelo Astro se a [opção de configuração `build.assetsPrefix`](/pt-br/reference/configuration-reference/#buildassetsprefix) for definida. Isso pode ser usado para criar links de assets não tratados pelo Astro. - -Use elas como qualquer outra variável de ambiente. - -```ts utils.ts -const isProd = import.meta.env.PROD; -const isDev = import.meta.env.DEV; -``` - -## Definindo variáveis de ambiente - -### Arquivos `.env` -Variáveis de ambiente podem ser carregadas de arquivos `.env` no diretório do seu projeto. - -Você também pode adicionar um modo (entre `production` ou `development`) ao nome do arquivo, como `.env.production` ou `env.development`, que faz com que a variável de ambiente apenas funcione nesse modo. - -Simplesmente crie um arquivo `.env` no diretório do seu projeto e adicione algumas variáveis a ele. - -```ini title=".env" -# Isso só estará disponível enquanto executado no servidor! -SENHA_BD="foobar" -# Isso estará disponível em todo lugar! -PUBLIC_POKEAPI="https://pokeapi.co/api/v2" -``` - -Para mais sobre arquivos `.env`, [veja a documentação do Vite](https://vite.dev/guide/env-and-mode.html#env-files). - -### Usando a CLI -Você também pode adicionar variáveis de ambiente enquanto você executa seu projeto: - - - - ```shell - POKEAPI=https://pokeapi.co/api/v2 yarn run dev - ``` - - - ```shell - POKEAPI=https://pokeapi.co/api/v2 npm run dev - ``` - - - ```shell - POKEAPI=https://pokeapi.co/api/v2 pnpm run dev - ``` - - - -:::caution -Variáveis definidas dessa forma estarão disponíveis em todo lugar no seu projeto, inclusive no cliente. -::: - -## Obtendo variáveis de ambiente - -Ao invés de utilizar `process.env` com o Vite, você pode utilizar `import.meta.env`, que usa a funcionalidade `import.meta` adicionado no ES2020. - -Por exemplo, utilize `import.meta.env.PUBLIC_POKEAPI` para obter a variável de ambiente `PUBLIC_POKEAPI`. - -```js /(?- - Está procurando como adicionar typefaces customizadas a um website Astro? - Utilize Google Fonts com Fontsource ou adicione uma fonte de sua escolha. -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; -import { Steps } from '@astrojs/starlight/components'; - -Este guia irá te mostrar como incluir fontes web no seu projeto e utilizar elas em seus componentes. - -## Utilizando um arquivo de fonte local - -Esse exemplo vai demonstrar como adicionar uma fonte personalizada usando o arquivo de fonte `DistantGalaxy.woff`. - - -1. Adicione seu arquivo de fonte a `public/fonts/`. -2. Adicione a seguinte declaração `@font-face` ao seu CSS. Isso pode ser feito num arquivo `.css` global que você importa, em um bloco ` - ``` - - -## Utilizando Fontsource - -O projeto [Fontsource](https://fontsource.org/) simplifica utilizar Google Fonts e outras fontes open-source. Ele providencia módulos npm que você pode instalar para as fontes que você quer utilizar. - - -1. Encontre a fonte que você quer utilizar no [catálogo do Fontsource](https://fontsource.org/). Esse exemplo vai usar [Twinkle Star](https://fontsource.org/fonts/twinkle-star). -2. Instale o pacote da sua fonte escolhida. - - - - ```shell - npm install @fontsource/twinkle-star - ``` - - - ```shell - pnpm add @fontsource/twinkle-star - ``` - - - ```shell - yarn add @fontsource/twinkle-star - ``` - - - - :::tip - Você irá encontrar o nome correto do pacote na seção “Quick Installation” (Instalação Rápida, em Português) da página de cada fonte no website do Fontsource. Ele começará com `@fontsource/` ou `@fontsource-variable/` seguido pelo nome da fonte. - ::: - -3. Importe o pacote da fonte no componente que você quer utilizar a fonte. Geralmente, você vai querer fazer isso em um componente de layout comum para certificar-se de que a fonte está disponível em todo o seu site. - - A importação irá automaticamente adicionar as regras do `@font-face` necessárias para configurar a fonte. - - ```astro title="src/layouts/LayoutBase.astro" - --- - import '@fontsource/twinkle-star'; - --- - ``` - -4. Utilize o nome da fonte como mostrado no exemplo `body` da página da fonte no Fontsource como o valor `font-family`. Isso irá funcionar em qualquer lugar aonde você pode escrever CSS em seu projeto Astro. - - ```css - h1 { - font-family: "Twinkle Star", cursive; - } - ``` - - -## Registrar fontes no Tailwind - -Se você estiver utilizando a [integração para Tailwind](/pt-br/guides/integrations-guide/tailwind/), você pode ou adicionar uma declaração `@font-face` para uma fonte local ou utilizar a estratégia de `import` do Fontsource para registrar sua fonte. - -Para registrar sua fonte no Tailwind: - - -1. Siga algum dos guias acima, mas pule a etapa final de adicionar `font-family` ao seu CSS. -2. Adicione o nome da typeface em `tailwind.config.mjs`. - - Este exemplo adiciona `Inter` à pilha de fontes sans-serif, com fontes de fallback padrão do Tailwind CSS. - - ```js title="tailwind.config.mjs" ins={1,8-10} - import defaultTheme from 'tailwindcss/defaultTheme' - - /** @type {import('tailwindcss').Config} */ - export default { - content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], - theme: { - extend: { - fontFamily: { - sans: ['Inter', ...defaultTheme.fontFamily.sans], - }, - }, - }, - plugins: [], - } - ``` - - Agora, todo texto sans-serif (o padrão no Tailwind) em seu projeto irá utilizar sua fonte escolhida e a classe `font-sans` também irá aplicar a fonte Inter. - - -Veja [a documentação do Tailwind em como adicionar famílias de fontes customizadas](https://tailwindcss.com/docs/font-family#using-custom-values) para mais informações. - -## Mais recursos - -- Aprenda sobre como fontes ad web funcionam no [guia da MDN em fontes web](https://developer.mozilla.org/en-US/docs/Learn/CSS/Styling_text/Web_fonts). -- Gere CSS para sua fonte com o [gerador de fontes web da Font Squirrel](https://www.fontsquirrel.com/tools/webfont-generator). diff --git a/src/content/docs/pt-br/guides/framework-components.mdx b/src/content/docs/pt-br/guides/framework-components.mdx deleted file mode 100644 index a9a37fe64eb39..0000000000000 --- a/src/content/docs/pt-br/guides/framework-components.mdx +++ /dev/null @@ -1,246 +0,0 @@ ---- -title: Componentes de Frameworks -description: 'Aprenda como utilizar React, Svelte, etc.' -i18nReady: true ---- -Construa seu website Astro sem sacrificar o seu framework de componentes favorito. - -Astro suporta uma variedade de frameworks populares incluindo [React](https://react.dev/), [Preact](https://preactjs.com/), [Svelte](https://svelte.dev/), [Vue](https://vuejs.org/), [SolidJS](https://www.solidjs.com/), [AlpineJS](https://alpinejs.dev/) e [Lit](https://lit.dev/). - -## Instalando Integrações - -Astro vem com [integrações opcionais](/pt-br/guides/integrations-guide/) para React, Preact, Svelte, Vue, SolidJS, AlpineJS e Lit. Uma ou várias destas integrações Astro podem ser instaladas e configuradas em seu projeto. - -⚙️ Veja o [Guia de Integrações](/pt-br/guides/integrations-guide/) para mais detalhes em como instalar e configurar integrações Astro. - -⚙️ Quer ver um exemplo do framework de sua escolha? Visite [astro.new](https://astro.new) e selecione um dos templates de frameworks. - -## Usando Componentes de Frameworks - -Utilize os componentes de frameworks JavaScript em suas páginas, layouts e componentes Astro assim como você utilizaria componentes Astro! Todos os seus componentes podem estar juntos em `/src/components`, ou podem ser organizados da forma que você preferir. - -Para usar um componente de framework, importe-o de seu caminho relativo no script do componente Astro. Então, use o componente ao lado de outros componentes, como elementos HTML e expressões estilo JSX no template do componente. - -```astro title="src/pages/componentes-estaticos.astro" ins={2,7} ---- -import MeuComponenteReact from '../components/MeuComponenteReact.jsx'; ---- - - -

Use componentes React diretamente no Astro!

- - - -``` - -Por padrão, seus componentes de frameworks serão renderizados apenas no servidor, como HTML estático. Isso é útil para fazer o template de componentes que não são interativos e evita mandar qualquer JavaScript desnecessário ao cliente. - -## Hidratando Componentes Interativos - -Um componente de framework pode se tornar interativo (hidratado) utilizando uma [diretiva `client:*`](/pt-br/reference/directives-reference/#diretivas-de-cliente). Elas são atributos de componente que determinam quando o JavaScript do seu componente deve ser enviado ao navegador. - -Com todas as diretivas de cliente exceto `client:only`, seu componente será primeiro renderizado no servidor para gerar HTML estático. JavaScript do componente será enviado ao navegador de acordo com a diretiva que você escolheu. O componente será então hidratado e se tornará interativo. - -```astro title="src/pages/componentes-interativos.astro" /client:\S+/ ---- -// Exemplo: hidratando componentes de frameworks no navegador. -import BotaoInterativo from '../components/BotaoInterativo.jsx'; -import ContadorInterativo from '../components/ContadorInterativo.jsx'; -import ModalInterativo from "../components/InteractiveModal.svelte" ---- - - - - - - - - -``` - -O framework JavaScript (React, Svelte, etc) necessário para renderizar o componente será enviado ao navegador junto do JavaScript do próprio componente. Se dois ou mais componentes em uma página usam o mesmo framework, o framework será enviado apenas uma vez. - -:::note[Acessibilidade] -A maioria dos padrões de acessibilidade específicos de frameworks devem funcionar da mesma forma ao serem utilizados no Astro. Certifique-se de utilizar uma diretiva de cliente que irá garantir que qualquer JavaScript relacionado à acessibilidade seja propriamente carregado e executado na hora certa! -::: - -### Diretivas de Hidratação Disponível - -Há diversas diretivas de hidratação disponíveis para componentes de frameworks de UI: `client:load`, `client:idle`, `client:visible`, `client:media={QUERY}` e `client:only={FRAMEWORK}`. - -📚 Veja nossa página de [referência de diretivas](/pt-br/reference/directives-reference/#diretivas-de-cliente) para uma descrição completa destas diretivas de hidratação e seus usos. - -## Misturando Frameworks - -Você pode importar e renderizar componentes de múltiplos frameworks em um mesmo componente Astro. - -```astro title="src/pages/misturando-frameworks.astro" ---- -// Exemplo: Misturando múltiplos componentes de frameworks na mesma página. -import MeuComponenteReact from '../components/MeuComponenteReact.jsx'; -import MeuComponenteSvelte from '../components/MeuComponenteSvelte.svelte'; -import MeuComponenteVue from '../components/MeuComponenteVue.vue'; ---- -
- - - -
-``` - -:::caution -Apenas componentes **Astro** (`.astro`) podem conter componentes de múltiplos frameworks. -::: - -## Passando Props Para Componentes de Frameworks - -Você pode passar props de componentes Astro para componentes de frameworks: - -```astro title="src/pages/props-frameworks.astro" ---- -import ListaDeFazeres from '../components/ListaDeFazeres.jsx'; -import Contador from '../components/Contador.svelte'; ---- -
- - -
-``` - -:::caution[passando funções como props] -Você pode passar uma função como prop para um componente de framework, mas ela apenas funciona durante renderização no servidor. Se você tentar utilizar a função em um componente hidratado (por exemplo, como um event handler), um erro irá ocorrer. - -Isso acontece pois funções não podem ser _serializadas_ (transferidas do servidor para o cliente) pelo Astro. -::: - -## Passando Filhos para Componentes de Frameworks - -Dentro de um componente Astro, você **pode** passar filhos para componentes de frameworks. Cada framework tem seus próprios padrões para como se referenciar a esses filhos: React, Preact, e Solid usam todos uma prop especial chamada `children`, enquanto Svelte e Vue usam o elemento ``. - -```astro title="src/pages/filhos-componentes.astro" {5} ---- -import MinhaBarraLateralReact from '../components/MinhaBarraLateralReact.jsx'; ---- - -

Aqui está uma barra lateral com algum texto e um botão.

-
-``` - -Adicionalmente, você pode usar [Slots Nomeados](/pt-br/basics/astro-components/#slots-nomeados) para agrupar filhos específicos juntos. - -Para React, Preact, e Solid esses slots serão convertidos em uma prop top-level. Nomes de slots usando`kebab-case` serão convertidos para `camelCase`. - -```astro title="src/pages/slots-nomeados.astro" /slot="(.*)"/ ---- -import MinhaBarraLateral from '../components/MinhaBarraLateral.jsx'; ---- - -

Menu

-

Aqui está uma barra lateral com algum texto e um botão.

- -
-``` - -```jsx /{props.(titulo|socialLinks)}/ -// src/components/MinhaBarraLateral.jsx -export default function MinhaBarraLateral(props) { - return ( - - ) -} -``` - -Para Svelte e Vue esses slots podem ser referenciados utilizando um elemento `` com o atributo `name`. Nomes de slots usando `kebab-case` serão preservados. - -```jsx /slot name="(.*)"/ -// src/components/MinhaBarraLateral.svelte - -``` - -## Aninhando Componentes de Frameworks - -Dentro de um arquivo Astro, filhos de componentes de frameworks também podem ser componentes hidratados. Isso significa que você pode recursivamente aninhar componentes de qualquer um desses frameworks. - -```astro title="src/pages/componentes-aninhados.astro" {10-11} ---- -import MinhaBarraLateralReact from '../components/MinhaBarraLateralReact.jsx'; -import MeuBotaoReact from '../components/MeuBotaoReact.jsx'; -import MeuBotaoSvelte from '../components/MeuBotaoSvelte.svelte'; ---- - - -

Aqui está uma barra lateral com algum texto e um botão.

-
- - -
-
-``` - -:::caution -Lembre-se: os próprios arquivos dos componentes de frameworks (e.x. `.jsx`, `.svelte`) não podem misturar múltiplos frameworks. -::: - -Isso te permite construir "aplicativos" inteiros com seu framework JavaScript favorito e o renderizar, via um componente parente, em uma página Astro. - -:::note -Componentes Astro sempre são renderizados como HTML estático, até mesmo quando incluem componentes de frameworks que são hidratados. Isso significa que você só pode passar props que não renderizam nenhum HTML. Passar "render props" do React para componentes de frameworks a partir de um componente Astro não irá funcionar, pois componentes Astro não podem providenciar o comportamento em runtime do cliente que esse padrão precisa. No lugar, use slots nomeados. -::: - -## Posso utilizar Componentes Astro dentro de meus Componentes de Frameworks? - -Qualquer componente de framework de UI se torna uma "ilha" daquele framework. Esses componentes precisam ser escritos inteiramente como código válido para aquele framework, usando apenas suas importações e pacotes. Você não pode importar componentes `.astro` em um componente de framework de UI (e.x. `.jsx` ou `.svelte`). - -Você pode, no entanto, utilizar o [padrão de `` do Astro](/pt-br/basics/astro-components/#slots) para passar conteúdo gerado estaticamente por componentes Astro como filhos de seus componentes de frameworks **dentro de um componente `.astro`**. - -```astro title="src/pages/filhos-astro.astro" {6} ---- -import MeuComponenteReact from '../components/MeuComponenteReact.jsx'; -import MeuComponenteAstro from '../components/MeuComponenteAstro.astro'; ---- - - - -``` - -## Posso utilizar Componentes Astro dentro de meus Componentes de Framework? - -Qualquer componente de framework UI se torna uma "ilha" daquele framework. Esses componentes devem ser escritos inteiramente como código válido para o framework, usando apenas suas próprias importações e pacotes. Você não pode importar componentes `.astro` em um componente de framework UI (e.x. `.jsx` ou `.svelte`). - -Você pode, porém, utilizar [o padrão `` do Astro](/pt-br/basics/astro-components/#slots) para passar conteúdo estático gerado por componentes Astro como filhos de seus componentes de framework **dentro de um componente `.astro`**. - -```astro title="src/pages/filhos-astro.astro" {6} ---- -import MeuComponenteReact from '../components/MeuComponenteReact.jsx'; -import MeuComponenteAstro from '../components/MeuComponenteAstro.astro'; ---- - - - -``` - -## Posso Hidratar Componentes Astro? - -Se você tentar hidratar um componente Astro com um modificador `client:`, você receberá um erro. - -[Componentes Astro](/pt-br/basics/astro-components/) são componentes de template de apenas HTML que não possuem runtime no lado do cliente. Porém, você pode usar uma tag ` - -Uma noite com um céu estrelado. - -``` - -#### Passando o componente Image - -O componente ``, assim como qualquer outro componente Astro, **não está disponível para componentes de frameworks de UI**. - -Porém, você pode passar o conteúdo estático gerado por `` para um componente de framework dentro de um arquivo `.astro` como um filho ou utilizando um [`` nomeado](/pt-br/guides/framework-components/#posso-utilizar-componentes-astro-dentro-de-meus-componentes-de-frameworks): - -```astro title="EnvolvedorImagem.astro" ---- -import ComponenteReact from './ComponenteReact.jsx'; -import { Image } from "astro:assets" -import estrelas from "~/estrelas/docline.png"; ---- - - - Uma noite com um céu estrelado. - -``` - -## Gerando imagens com `getImage()` - -:::caution -`getImage()` depende em APIs únicas do servidor e quebra a build quando é utilizado no cliente. -::: - -A função `getImage()` foi planejada para gerar imagens destinadas a serem usadas em outro lugar do que diretamente no HTML, por exemplo em uma [Rota de API](/pt-br/guides/endpoints/#endpoints-do-servidor-rotas-de-api). Ela te permite criar seu próprio componente `` customizado. - - - -`getImage()` recebe um objeto de opções com as [mesmas propriedades que o componente Image](#propriedades) (exceto `alt`). - -```astro ---- -import { getImage } from "astro:assets"; -import meuPlanoFundo from "../planoFundo.png" - -const planoFundoOtimizado = await getImage({src: meuPlanoFundo, format: 'webp'}) ---- - -
-``` - -Retorna um objeto com as seguintes propriedades: - -```js -{ - rawOptions: {...} // Parâmetros originais passados - options: {...}, // Parâmetros validados passados - src: "https//..." // Caminho para a imagem gerada - srcSet: { - values: [...], // Valores gerados para srcset, cada entrada tem uma url e uma descrição de tamanho - attribute: "", // Atributo srcset gerado a partir dos valores - } - attributes: {...} // Atributos HTML adicionais necessários para renderizar a imagem (width, height, style, etc..) -} -``` - -## Texto Alternativo - -Nem todos os usuários podem ver imagens da mesma forma, então acessibilidade é uma preocupação especialmente importante ao utilizar imagens. Utilize o atributo `alt` para fornecer [texto alternativo descritivo](https://www.w3.org/WAI/tutorials/images/) para imagens. - -Esse atributo é necessário para ambos os componentes `` e ``. Se nenhum texto alternativo for fornecido, uma mensagem de erro será exibida te lembrando de incluir o atributo `alt`. - -Se a imagem for meramente decorativa (ou seja, não contribui para o entendimento da página), defina `alt=""` para que leitores de tela saibam ignorar a imagem. - -## Serviço de imagem padrão - -[Sharp](https://github.com/lovell/sharp) é o serviço de imagem padrão utilizado em `astro:assets`. Você pode configurar o serviço de imagem utilizando a opção [`image.service`](/pt-br/reference/configuration-reference/#imageservice). - -:::note -Ao usar um [gerenciador de pacotes rigoroso](https://pnpm.io/pnpm-vs-npm#npms-flat-tree) como o `pnpm`, talvez seja necessário instalar o Sharp manualmente no seu projeto, mesmo que seja uma dependência do Astro: - -```bash -pnpm add sharp -``` -::: - -### Configure o Squoosh - -Se você preferir utilizar [Squoosh](https://github.com/GoogleChromeLabs/squoosh) para transformar suas imagens, atualize sua configuração com o seguinte: - -```js title="astro.config.mjs" ins={4-6} -import { defineConfig, squooshImageService } from 'astro/config'; - -export default defineConfig({ - image: { - service: squooshImageService(), - }, -}); -``` - -### Configure o serviço de passagem não-operacional - -Se o seu [adaptador para modo `server` ou `hybrid`](https://astro.build/integrations/?search=&categories%5B%5D=adapters) não suportar os serviços de otimização Squoosh e Sharp integrados do Astro (por exemplo, Deno e Cloudflare), você pode configurar um serviço de imagem não-operacional para permitir que utilize os componentes `` e ``. Note que o Astro não executa nenhuma transformação e processamento de imagens nesses ambientes. No entanto, você ainda pode aproveitar os outros benefícios de utilizar o `astro:assets`, incluindo não ter Cumulative Layout Shift (CLS), a exigência do atributo `alt` e uma experiência de criação consistente. - -Configure o `passthroughImageService` para evitar ambos os processamentos de imagem Squoosh e Sharp: - -```js title="astro.config.mjs" ins={4-6} "passthroughImageService" -import { defineConfig, passthroughImageService } from 'astro/config'; - -export default defineConfig({ - image: { - service: passthroughImageService() - } -}); -``` - -## Integrações da Comunidade - -Há diversas [integrações de imagem da comunidade](https://astro.build/integrations?search=images) de terceiros para otimizar e trabalhar com imagens em seu projeto Astro. - -## Atualize para v3.0 da v2.x - -`astro:assets` não está mais atrás de uma flag experimental no Astro v3.0. - -`` agora é um componente integrado e a integração `@astrojs/image` anterior foi removida. - -Essas e outras alterações que acompanham o uso de imagens no Astro podem causar algumas mudanças significativas quando você atualizar seu projeto Astro de uma versão anterior. - -Por favor siga as instruções abaixo apropriadamente para atualizar um projeto Astro v2.x para v3.0. - -### Atualize de `experimental.assets` - -Se você anteriormente habilitou a flag experimental para `astro:assets`, você vai precisar atualizar seu projeto para Astro v3.0 que agora inclui funcionalidades de assets por padrão. - -#### Remova a flag `experimental.assets` - -Remova a flag experimental: - -```js title="astro.config.mjs" del={4-6} -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - experimental: { - assets: true - } -}); -``` - -Se necessário, também atualize seu arquivo `src/env.d.ts` para substituir a referência `astro/client-image` com `astro/client`: - -```ts title="src/env.d.ts" del={1} ins={2} -/// -/// -``` - -#### Remova o atalho de importação `~/assets` - -Esse atalho de importação não é mais incluído por padrão com `astro:assets`. Se você estava utilizando esse atalho com assets experimentais, você deve convertê-los em caminhos de arquivo relativos ou [criar seu próprio atalho de importação](/pt-br/guides/imports/#aliases). - -```astro title="src/pages/posts/post-1.astro" del={2} ins={3} ---- -import foguete from '~/assets/foguete.png' -import foguete from '../../assets/foguete.png'; ---- -``` - -#### Adicione suporte simples de assets para Cloudflare, Deno, Vercel Edge e Netlify Edge - -Astro v3.0 permite que `astro:assets` funcione sem erros no Cloudflare, Deno, Vercel Edge e Netlify Edge, que não suportam a otimização de imagem Squoosh e Sharp integrada do Astro. Observe que o Astro não realiza nenhuma transformação e processamento de imagem nesses ambientes. No entanto, você ainda pode aproveitar os outros benefícios do uso de `astro:assets`, incluindo a ausência de Cumulative Layout Shift (CLS), o atributo `alt` obrigatório e uma experiência de criação consistente. - -Se antes você evitava usar `astro:assets` por causa dessas restrições, agora pode usá-los sem problemas. Você pode configurar o serviço de imagem no-op para aceitar explicitamente esse comportamento: - -```js title="astro.config.mjs" ins={4-8} -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - image: { - service: { - entrypoint: 'astro/assets/services/noop' - } - } -}); -``` - -### Decida onde armazenar suas imagens - -Veja o guia de Imagens para te ajudar a decidir [onde armazenar suas imagens](#onde-armazenar-imagens). Você pode desejar se aproveitar de novas opções para armazenar suas imagens com a flexibilidade adicional que `astro:assets` traz. Por exemplo, imagens relativas a partir do `src/` do seu projeto podem ser referenciadas em Markdown, MDX e Markdoc utilizando a sintaxe padrão do Markdown `![alt](src)`. - -### Atualize tags `` existentes - -Anteriormente, a importação de uma imagem retornava uma simples `string` com o caminho da imagem. Agora, os assets de imagem importados correspondem à seguinte assinatura: - -```ts -interface ImageMetadata { - src: string; - width: number; - height: number; - format: string; -} -``` - -Você deve atualizar o atributo `src` de quaisquer tags `` existentes (incluindo quaisquer [imagens em componentes de framework de UI](#imagens-em-componentes-de-frameworks-de-ui)) e você também pode atualizar outros atributos que agora estão disponíveis para você da imagem importada. - -```astro title="src/components/MeuComponente.astro" ".src" ".width" ".height" del={4} ins={6} ---- -import foguete from '../imagens/foguete.svg'; ---- -Um foguete no espaço. - -Um foguete no espaço. -``` - -### Atualize seus arquivos Markdown, MDX e Markdoc - -Imagens relativas da pasta `src/` do seu projeto agora podem ser referenciadas em Markdown, MDX e Markdoc utilizando a sintaxe padrão do Markdown `![alt](src)`. - -Isso te permite mover suas imagens do diretório `public/` para o `src/` do seu projeto onde agora elas serão processadas e otimizadas. Suas imagens existentes em `public/` e imagens remotas ainda são válidas mas não são otimizadas pelo processo de build do Astro. - -```md title="src/pages/posts/post-1.md" "/_astro" ".hash" "../../assets/" -# Minha Página Markdown - - -![Uma noite com um céu estrelado.](../../imagens/estrelas.png) - - -![Uma noite com um céu estrelado.](./estrelas.png) -``` - -Se você requer mais controle sobre seus atributos de imagem, nós recomendamos utilizar o formato de arquivo `.mdx`, que permite incluir o componente `` do Astro ou uma tag JSX `` além da sintaxe do Markdown. Utilize a [integração MDX](/pt-br/guides/integrations-guide/mdx/) para adicionar suporte de MDX ao Astro. - -### Remova `@astrojs/image` - -Se você estava utilizando a integração de imagem em Astro v2.x, complete as seguintes etapas: - - -1. Remova a integração `@astrojs/image`. - - Você deve [remover a integração](/pt-br/guides/integrations-guide/#removendo-uma-integração) desinstalando-a e, em seguida, removendo-a do seu arquivo `astro.config.mjs`. - - ```js del={3,7} - // astro.config.mjs - import { defineConfig } from 'astro/config'; - import image from '@astrojs/image'; - - export default defineConfig({ - integrations: [ - image(), - ] - }) - ``` - -2. Atualize tipos (se necessário). - - Se você tinha tipos especiais configurados para `@astrojs/image` em `src/env.d.ts`, pode ser necessário alterá-los de volta para os tipos padrão do Astro se a atualização para a versão 3 não concluiu esta etapa automaticamente para você. - - ```ts title="src/env.d.ts" del={1} ins={2} - /// - /// - ``` - - Da mesma forma, atualize o `tsconfig.json` se necessário: - - ```json title="tsconfig.json" del={3} ins={4} - { - "compilerOptions": { - "types": ["@astrojs/image/client"] - "types": ["astro/client"] - } - } - ``` - -3. Migre quaisquer componentes ``. - - Modifique todas as declarações `import` de `@astrojs/image/components` para `astro:assets` para utilizar o novo componente `` integrado. - - Remova quaisquer atributos do componente que não são [propriedades de asset de imagem atualmente suportadas](#propriedades). - - Por exemplo, `aspectRatio` não é mais suportado, já que agora é automaticamente inferido dos atributos `width` e `height`. - - ```astro title="src/components/MeuComponente.astro" del= {2,11} ins={3} - --- - import { Image } from '@astrojs/image/components'; - import { Image } from 'astro:assets' - import imagemLocal from "../assets/logo.png"; - const altLocal = "A logo do Astro"; - --- - - {altLocal} - ``` - -4. Escolha o serviço de imagem padrão. - - [Sharp](https://github.com/lovell/sharp) agora é o serviço de imagem padrão usado para `astro:assets`. Se você quiser utilizar Sharp, nenhuma configuração é necessária. - - Se você preferir utilizar [Squoosh](https://github.com/GoogleChromeLabs/squoosh) para transformar suas imagens, atualize sua configuração com a opção `image.service` a seguir: - - ```js title="astro.config.mjs" ins={4-6} - import { defineConfig, squooshImageService } from 'astro/config'; - - export default defineConfig({ - image: { - service: squooshImageService(), - }, - }); - ``` - - -### Atualize esquemas de Coleções de Conteúdo - -Agora você pode declarar uma imagem associada a uma entrada de coleções de conteúdo, como a imagem de capa de uma postagem de blog, em seu frontmatter usando seu caminho relativo à pasta atual. - -O novo utilitário `image` para coleções de conteúdo te permite validar os metadados da imagem utilizando Zod. Aprenda mais sobre [como utilizar imagens em coleções de conteúdo](/pt-br/guides/images/#imagens-em-coleções-de-conteúdo). - -### Navegando Importações de Imagem no Astro v3.0 - -No Astro v3.0, se você precisar preservar o antigo comportamento de importação para imagens e exigir uma representação de string do URL da imagem, adicione `?url` ao final do caminho da sua imagem ao importá-la. Por exemplo: - -```astro title="src/pages/blog/MinhasImagens.astro" ---- -import Sprite from '../assets/logo.svg?url'; ---- - - - - -``` - -Essa abordagem garante que você obtenha a string de URL. Tenha em mente que, durante o desenvolvimento, o Astro usa um caminho `src/`, mas, ao fazer build, ele gera caminhos com hash como `/_astro/gato.a6737dd3.png`. - -Se você preferir trabalhar diretamente com o próprio objeto de imagem, você pode acessar a propriedade `.src`. Essa abordagem é melhor para tarefas como gerenciar as dimensões da imagem para métricas Core Web Vitals e prevenir o CLS. - -Se você estiver em transição para o novo comportamento de importação, combinar os métodos `?url` e `.src` pode ser o método certo para o manuseio de imagens ininterrupto. diff --git a/src/content/docs/pt-br/guides/imports.mdx b/src/content/docs/pt-br/guides/imports.mdx deleted file mode 100644 index a4e24148ade73..0000000000000 --- a/src/content/docs/pt-br/guides/imports.mdx +++ /dev/null @@ -1,389 +0,0 @@ ---- -title: Importações -description: Aprenda como importar diferentes tipos de conteúdo com Astro. -i18nReady: true ---- -import RecipeLinks from "~/components/RecipeLinks.astro"; -import ReadMore from '~/components/ReadMore.astro' - -Astro suporta a maioria dos assets estáticos com zero configurações necessárias. Você pode usar a declaração `import` em qualquer lugar do seu projeto JavaScript (incluindo seu frontmatter Astro) e Astro irá incluir uma cópia otimizada do asset estático na build final do seu projeto. `@import` também é suportado dentro de CSS e tags ` -``` - -### Estilos com Escopo - -As regras de CSS em ` -``` - -Compila para isto: -```astro - -``` - - -Estilos com escopo não conflitam e não irão impactar o restante do seu site. Em Astro, não é um problema utilizar seletores de baixa especificidade como `h1{}` ou `p{}` pois eles serão compilados com escopos no resultado final. - -Estilos com escopo também não serão aplicados em outros componentes astro contidos dentro de seu template. Se você precisa estilizar um componente filho, considere envolver esse componente em uma `
` ( ou em outro elemento ) para que você possa então estilizá-lo. - -A especificidade de estilos com escopo é preservada, os permitindo funcionar de forma consistente com outros arquivos ou bibliotecas CSS enquanto ainda se preserva os limites exclusivos que previnem que estilos sejam aplicados fora do componente. - -### Estilos Globais - -Ao mesmo tempo que nós recomendamos estilos com escopo para a maioria dos componentes, você pode eventualmente ter uma razão válida para escrever CSS global. Você pode optar por remover CSS com escopo automático adicionando o atributo `is:global` na tag ` -``` - -Você pode também mesclar regras CSS globais e com escopo juntas na mesma tag ` -

Título

-
-``` - -Isto é uma ótima forma de estilizar coisas como postagens em blogs ou documentos alimentados por conteúdos de um CMS, onde o conteúdo fica fora do Astro. Contudo, seja cuidadoso: os componentes cuja aparência muda de acordo com a condição de que ele tem um certo parente, torna mais difícil solucionar problemas futuros que o envolvam. - -Estilos com escopo são recomendados para serem usados sempre que possível. E estilos globais, quando necessários. - -### Combinando classes com `class:list` - -Se você precisa combinar classes em um elemento dinamicamente, você pode utilizar o atributo utilitário `class:list` em arquivos `.astro`. - -```astro title="src/components/ClassList.astro" /class:list={.*}/ ---- -const { isVermelho } = Astro.props; ---- - - -
- - -``` - -📚 Veja nossa página de [referência de diretivas](/pt-br/reference/directives-reference/#classlist) para aprender mais sobre `class:list`. - -### Variáveis no CSS - - - -Em Astro, ` -

Olá

-``` - -📚 Veja nossa [página de referência de diretivas](/pt-br/reference/directives-reference/#definevars) para saber mais sobre `define:vars`. - -### Passando `class` para um componente filho - -No Astro, atributos HTML como `class` não são passados automaticamente para componente filhos. - -Ao invés disso, aceite uma prop `class` no componente filho e aplique-a no elemento raiz. Ao fazer desestruturação, você precisa renomeá-la, pois `class` é uma [palavra reservada](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Lexical_grammar#palavras-chave_reservadas_do_ecmascript_2015) no JavaScript. - -Ao usar a estratégia de estilo com escopo padrão, você também deve passar o atributo `data-astro-cid-*`. Você pode fazer isso passando o `...rest` das props para o componente. Se você alterou a propriedade `scopedStyleStrategy` para `'class'` ou `'where'`, a prop `...rest` não é necessária. - -```astro title="src/components/MeuComponente.astro" {2,4} ---- -const { class: nomeClasse, ...resto } = Astro.props; ---- -
- -
-``` - -```astro title="src/pages/index.astro" ---- -import MeuComponente from "../components/MeuComponente.astro" ---- - -Isso será vermelho! -``` - -:::note[Estilos com escopo de componentes pais] -Devido a presença do atributo `data-astro-cid-*`, que inclui o filho no escopo do pai, é possível que os estilos se propaguem do pai para o filho. Para evitar efeitos colaterais indesejados, certifique-se de usar nomes de classe exclusivos no componente filho. -::: - -### Estilos em linha - -Você pode estilizar elementos HTML em linha usando o atributo `style`. Isso pode ser uma string CSS ou um objeto de propriedades CSS: - -```astro title="src/pages/index.astro" -// Estes são equivalentes: -

Meu texto

-

Meu texto

-``` - -## Estilos Externos - -Há duas formas para incluir folhas de estilos globais e externas: uma importação ESM para arquivos dentro de seu projeto, e com um link URL absoluto para arquivos em seu diretório `public/` ou disponíveis fora de seu projeto. - -📚 Leia mais sobre como utilizar [assets estáticos](/pt-br/guides/imports/) localizados no diretório `public/` ou `src/`. - -### Importe uma Folha de Estilos Local - -:::caution[Utilizando um pacote do npm?] -Você talvez precise atualizar o seu astro.config quando estiver importando CSS de pacotes do npm. Veja a [seção de importação de uma folha de estilos de um pacote do npm](#importe-uma-folha-de-estilos-de-um-pacote-do-npm) abaixo. -::: - -Você pode importar folhas de estilos no frontmatter do seu componente Astro usando a sintaxe de importação ESM. Importação de CSS funcionam como [qualquer outra importação ESM em um componente Astro](/pt-br/basics/astro-components/#o-script-do-componente), que deve ser referenciada **relativo para o componente** e obrigatoriamente deve ser escrito no **início** do script do seu componente junto com outras importações. - -```astro title="src/pages/index.astro" {4} ---- -// Astro irá fazer bundle e otimizar este CSS para você automaticamente -// Isto também funciona para arquivos pré-processados como .scss, .styl, etc. -import '../estilos/utils.css'; ---- - -``` - -`import` de CSS por meio de ESM é suportado dentro de qualquer arquivo JavaScript, incluindo componentes JSX como React e Preact. Isto pode ser útil para escrever estilos por componente de forma granular para seus componentes React. - -### Importe uma Folha de Estilos de um Pacote do NPM - -Você talvez precise incluir uma folha de estilos de um pacote externo. Isso é especialmente comum para utilitários como [Open Props](https://open-props.style/). Se seu pacote **recomenda usar uma extensão de arquivo** (ex.: `nome-do-pacote/estilos.css` ao invés de `nome-do-pacote/estilos`), isso deve funcionar como qualquer importação de uma folha de estilos local. - -```astro {3} ---- -// src/pages/página-qualquer.astro -import 'nome-do-pacote/estilos.css'; ---- - -``` - -Se seu pacote **não recomenda usar uma extensão de arquivo** (ex.: `nome-do-pacote/estilos`), antes, você vai precisar atualizar sua configuração Astro! - -Digamos que você está importando um arquivo CSS de um `nome-do-pacote` chamado `normalize` (com a extensão omitida). Para garantir que nós podemos pré-renderizar sua página corretamente, adicione `nome-do-pacote` para [o array vite.ssr.noExternal](https://vite.dev/config/ssr-options.html#ssr-noexternal): - -```js ins={7} -// astro.config.mjs -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - vite: { - ssr: { - noExternal: ['nome-do-pacote'], - } - } -}) -``` - -:::note -Isso é uma [configuração específica do Vite](https://vite.dev/config/ssr-options.html#ssr-noexternal) que não tem relação com (ou necessita de) [SSR do Astro](/pt-br/guides/on-demand-rendering/). -::: - -Agora, você está livre para importar `nome-do-pacote/normalize`. Isto passará por bundle e será otimizado pelo Astro como qualquer outra folha de estilos local. - - -```astro {3} ---- -// src/pages/página-qualquer.astro -import 'nome-do-pacote/normalize'; ---- - -``` - -### Inclua uma Folha de Estilos Estática via tags link - -Você pode também usar o elemento `` para incluir uma folha de estilos na página. Isto deve ser um caminho de URL absoluto para um arquivo CSS localizado no seu diretório `/public`, ou uma URL para um website externo. Note que valores relativos de href para o elemento `` não são suportados. - -```html title="src/pages/index.astro" {3,5} - - - - - - -``` - -Como esta abordagem usa o diretório `public/`, ela pula o processamento normal do CSS, o processo de bundle e outras otimizações feitas por Astro. Sendo assim, se você precisa desses recursos, use o método de [importe uma folha de estilos](#importe-uma-folha-de-estilos-local) ensinado acima. - -## Ordem de Cascata - -Componentes Astro as vezes terão que analisar múltiplas fontes de CSS. Por exemplo, seu componente pode importar uma folha de estilos CSS, incluir sua própria tag ` -
-

- Esse título será roxo! -

-
-``` - -Se duas regras tem a mesma especificidade, então a _ordem de aparecimento_ é avaliada e o valor da última regra terá precedência: -```astro title="MeuComponente.astro" - -
-

- Esse título será vermelho! -

-
-``` - -As regras de CSS do Astro são avaliadas nessa ordem de aparecimento: - -- **tags `` na head** (menor precedência) -- **estilos importados** -- **estilos com escopo** (maior precedência) - -### Estilos com Escopo - -Utilizar [estilos com escopo](#estilos-com-escopo) não aumenta a _especificidade_ do seu CSS, porém eles sempre irão vir por último na _ordem de aparecimento_. Logo eles tomarão precedência sobre outros estilos de mesma especificidade. Por exemplo, se você importar uma folha de estilos que conflita com um estilo com escopo, o valor do estilo com escopo será aplicado: - -```css title="o-faça-roxo.css" -h1 { - color: purple; -} -``` -```astro title="MeuComponente.astro" ---- -import "./o-faça-roxo.css" ---- - -
-

- Esse título será vermelho! -

-
-``` - -Se você fazer o estilo importado _mais específico_, ele terá uma maior precedência sobre o estilo com escopo: - -```css title="o-faça-roxo.css" -div > h1 { - color: purple; -} -``` -```astro title="MeuComponente.astro" ---- -import "./o-faça-roxo.css" ---- - -
-

- Esse título será roxo! -

-
-``` - -### Ordem de Importação - -Ao importar múltiplas folhas de estilo em um componente Astro, as regras de CSS são analisadas na ordem em que são importadas. Uma maior especificidade sempre irá determinar quais estilos serão mostrados, não importa onde o CSS é analisado. Porém, quando estilos conflitantes tem a mesma especificidade, o _último a ser importado_ ganha: - -```css title="o-faça-roxo.css" -div > h1 { - color: purple; -} -``` -```css title="o-faça-verde.css" -div > h1 { - color: green; -} -``` -```astro title="MeuComponente.astro" ---- -import "./o-faça-verde.css" -import "./o-faça-roxo.css" ---- - -
-

- Esse título será roxo! -

-
-``` - -Enquanto tags ` -
-

- Esse título será roxo! -

-
-``` - -:::tip -Um padrão comum no Astro é importar CSS global dentro de um [componente de Layout](/pt-br/basics/layouts/). Certifique-se de importar o componente de Layout antes de outras importações para que ele tenha a menor precedência. -::: - -### Tags Link -Folhas de estilo carregadas via [tags link](#inclua-uma-folha-de-estilos-estática-via-tags-link) são analisadas em ordem, antes de quaisquer outros estilos em um arquivo Astro. Portanto, esses estilos terão menor precedência que folhas de estilo importadas e estilos com escopo: - -```astro title="index.astro" ---- -import "../components/o-faça-roxo.css" ---- - - - - - - - - Astro - - - -
-

Isso será roxo

-
- - -``` - -## Integrações CSS - -Astro vem com suporte para adicionar bibliotecas, ferramentas e frameworks CSS populares para seu projeto como [Tailwind](https://tailwindcss.com) e mais! - -### Tailwind - -Para usar o Tailwind no seu projeto, instale a [integração para Tailwind oficial do Astro][tailwind] usando o comando `astro add` no seu gerenciador de pacotes: - - - - ```shell - npx astro add tailwind - ``` - - - ```shell - pnpm astro add tailwind - ``` - - - ```shell - yarn astro add tailwind - ``` - - - -📚 Veja o [Guia de Integrações](/pt-br/guides/integrations-guide/) para instruções sobre instalação, importação, e configuração destas integrações. - - -## Pré-processadores CSS - -Astro suporta pré-processadores tais como [Sass][sass], [Stylus][stylus], e [Less][less] através de [Vite][vite-preprocessors]. - -### Sass e SCSS - -```shell -npm install sass -``` - -Use ` -``` - -Veja a [documentação do Vite](https://vite.dev/guide/assets.html#importing-asset-as-string) para detalhes completos. -### Importação de CSS com `?url` - -Para casos de uso avançado, você pode importar uma referência URL direta para um arquivo CSS dentro de seu projeto no diretório `src/`. Isto pode ser útil quando você necessita de controle completo sobre como um arquivo é incluído na página. Entretanto, isto vai prevenir a otimização desse arquivo CSS com o resto do CSS da sua página. - -Isto não é recomendável para a maioria dos usuários. Em vez disso, coloque os arquivos CSS dentro de `public/` para conseguir uma referência URL consistente. - -:::caution -Importar um arquivo CSS menor com `?url` talvez retorne o conteúdo dos arquivos CSS codificado em base64 como uma URL de dados, mas somente em sua build final. Sendo assim, você pode escrever seu código com suporte para URLs codificadas (`data:text/css;base64,...`) ou configurar a opção [`vite.build.assetsInlineLimit`](https://vite.dev/config/#build-assetsinlinelimit) para `0` para desabilitar esta funcionalidade. -::: - -```astro title="src/components/UrlEstilosBrutos.astro" "?url" ---- -// Exemplo avançado! Não recomendável para a maioria dos usuários. -import urlEstilos from '../estilos/principal.css?url'; ---- - - -``` - -Veja a [documentação do Vite](https://vite.dev/guide/assets.html#importing-asset-as-url) para detalhes completos. - - -[less]: https://lesscss.org/ -[sass]: https://sass-lang.com/ -[stylus]: https://stylus-lang.com/ -[svelte-style]: https://svelte.dev/docs#component-format-style -[tailwind]: /pt-br/guides/integrations-guide/tailwind/ -[vite-preprocessors]: https://vite.dev/guide/features.html#css-pre-processors -[vue-css-modules]: https://vue-loader.vuejs.org/guide/css-modules.html -[vue-scoped]: https://vue-loader.vuejs.org/guide/scoped-css.html diff --git a/src/content/docs/pt-br/guides/testing.mdx b/src/content/docs/pt-br/guides/testing.mdx deleted file mode 100644 index 65b7c73aa41c8..0000000000000 --- a/src/content/docs/pt-br/guides/testing.mdx +++ /dev/null @@ -1,268 +0,0 @@ ---- -title: Testes -description: Uma introdução para testes no Astro -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - - -Fazer testes o ajuda a escrever e manter código Astro em funcionamento. O Astro suporta muitas ferramentas populares para testes de unidade, testes de componente e testes de ponta a ponta (e2e), incluindo Jest, Mocha, Jasmine, [Cypress](https://cypress.io) e [Playwright](https://playwright.dev). Você pode até mesmo instalar bibliotecas de testes específicos de frameworks como a React Testing Library, para testar seus componentes de frameworks de UI. - -Frameworks de testes permitem que você declare **afirmações** ou **expectativas** sobre como seu código deve se comportar em situações específicas e, em seguida, as compare com o comportamento real do seu código atual. - -## Vitest - -Vitest é um framework de testes de unidade nativo do Vite com suporte a ESM, TypeScript e JSX fornecido pelo esbuild. - -Use o auxiliar `getViteConfig()` do Astro no seu arquivo de configuração [`vitest.config.ts`](https://vitest.dev/config/) para configurar o Vitest com as configurações do seu projeto Astro. - -```js -// vitest.config.ts -import { getViteConfig } from 'astro/config'; - -export default getViteConfig({ - test: { - // opções de configuração do Vitest - }, -}); -``` - -Veja o [template inicial de Astro + Vitest](https://github.com/withastro/astro/tree/latest/examples/with-vitest) no GitHub. - -## Cypress - -Cypress é uma ferramenta de testes front-end construído para a web moderna. Cypress permite você escrever testes de ponta a ponta para o seu site em Astro. - -### Instalação - -Você pode instalar Cypress usando o gerenciador de pacotes da sua escolha. - - - - ```shell - npm install -D cypress - ``` - - Isso vai instalar Cypress localmente como uma dependências de desenvolvimento para seu projeto. - - - ```shell - pnpm add cypress --save-dev - ``` - - - ```shell - yarn add cypress --dev - ``` - - - -### Configuração - -Na raiz do seu projeto, crie um arquivo `cypress.config.js` com o seguinte conteúdo: - -```js title="cypress.config.js" -import { defineConfig } from 'cypress' - -export default defineConfig({ - e2e: { - supportFile: false - } -}) -``` - -### Crie seu primeiro teste do Cypress - -1. Escolha uma página para testar. Este exemplo vai testar a página de exemplo `index.astro` abaixo. - - ```html title="src/pages/index.astro" - --- - --- - - - Astro e incrível! - - - -

Olá mundo do Astro

- - - ``` - -2. Crie um arquivo `index.cy.js` na pasta `cypress/e2e`. Use o seguinte teste no arquivo para verificar que o título da página e o cabeçalho estão corretos. - - ```js title="cypress/e2e/index.cy.js" - it('títulos estão corretos', () => { - const pagina = cy.visit('http://localhost:4321'); - - pagina.get('title').should('have.text', 'Astro e incrível!') - pagina.get('h1').should('have.text', 'Olá mundo do Astro'); - }); - ``` - - :::tip[defina um baseUrl] - Você pode definir [`"baseUrl": "http://localhost:4321"`](https://docs.cypress.io/guides/end-to-end-testing/testing-your-app#Step-3-Configure-Cypress) no arquivo de configuração `cypress.config.js` para usar `cy.visit("/")` ao invés de `cy.visit("http://localhost:4321/")` para uma URL mais conveniente. - ::: - -### Executando seus testes do Cypress - -Cypress pode executar a partir da linha de comando ou do aplicativo Cypress. O aplicativo fornece uma interface visual para executar e debuggar seus testes. - -Primeiro, inicie o servidor de desenvolvimento para que o Cypress possa acessar seu site ao vivo. - -Para executar nosso testes do exemplo anterior usando a linha de comando, execute o seguinte comando: - -```shell -npx cypress run -``` - -Alternativamente, execute o teste usando o aplicativo Cypress, execute o seguinte comando: - -```shell -npx cypress open -``` - -Uma vez que o aplicativo Cypress for lançado, escolha **E2E Testing**, então selecione o navegador para ser usado para executar os testes. - -Uma vez que a execução do teste tenha finalizado, você deve ver algumas marcações verdes na saída confirmando que seus testes passaram: - -```shell title="Saída do npx cypress run" -Running: index.cy.js (1 of 1) - - -✓ títulos estão corretos (107ms) - -1 passing (1s) -``` - -:::note[falhe o teste] -Para checar que seu teste realmente funciona, você pode alterar a seguinte linha no arquivo `index.astro`: - - ```astro title="src/pages/index.astro" del={2} ins={3} - -

Olá mundo do Astro

-

Olá do Astro

- -``` - -Então execute o teste novamente. Você deve ver um "x" vermelho na saída confirmando que seu teste falhou. -::: - -### Próximos passos - -Mais informações sobre o Cypress podem ser encontradas nos links abaixo: - -- [Introdução ao Cypress](https://docs.cypress.io/guides/basics/introduction-to-cypress) -- [Testando Seu App](https://docs.cypress.io/guides/end-to-end-testing/testing-your-app) - -## Playwright - -Playwright é um framework de testes de ponta a ponta para aplicações web modernas. Use a API do Playwright com JavaScript ou TypeScript para testar seu código Astro em todos os motores de renderização modernos, incluindo Chromium, WebKit e Firefox. - -### Instalação - -Você pode começar e executar seus testes usando a [extensão do VS Code](https://playwright.dev/docs/getting-started-vscode). - -Como alternativa, você pode instalar o Playwright dentro do seu projeto Astro usando o gerenciador de pacotes de sua escolha. Siga as etapas da CLI para escolher JavaScript/TypeScript, nomear sua pasta de testes e opcionalmente, adicionar um fluxo de trabalho do GitHub Actions. - - - - ```shell - npm init playwright@latest - ``` - - - ```shell - pnpm dlx create-playwright - ``` - - - ```shell - yarn create playwright - ``` - - - -### Crie seu primeiro teste com Playwright - -1. Escolha uma página para testar. Este exemplo vai testar a página de exemplo `index.astro` abaixo. - - ```html title="src/pages/index.astro" - --- - --- - - - Astro é incrível! - - - - - ``` - -1. Crie uma nova pasta e adicione o seguinte arquivo de teste em `src/test`. Copie e cole o seguinte teste no arquivo para verificar se os metadados da página estão corretos. Atualize o valor do `` da página para corresponder à página que você está testando. - - ```jsx title="src/test/index.spec.ts" "Astro é incrível!" - import { test, expect } from '@playwright/test'; - - test('metadados estão corretos', async ({ page }) => { - await page.goto("http://localhost:4321/"); - - await expect(page).toHaveTitle('Astro é incrível'); - }); - ``` - - :::tip[Defina a URL base] - Você pode definir [`"baseURL": "http://localhost:4321"`](https://playwright.dev/docs/api/class-testoptions#test-options-base-url) no arquivo de configuração `playwright.config.ts` para usar `page.goto("/")` ao invés de `page.goto("http://localhost:4321/")` em prol de uma URL mais conveniente. - ::: - -### Executando seus testes com Playwright - -Você pode executar um único teste ou vários de uma vez, testando em um ou em vários navegadores. Por padrão, os resultados dos seus testes serão mostrados no terminal. Como opção, você pode abrir o HTML Test Reporter para mostrar um relatório completo e filtrar os resultados dos testes. - -1. Para executar nosso teste do exemplo anterior usando a linha de comando, use o comando `test`. Opcionalmente, inclua o nome do arquivo para executar um único teste: - - ```sh - npx playwright test index.spec.ts - ``` - -1. Para ver o HTML Test Report completo, abra-o usando o seguinte comando: - - ```sh - npx playwright show-report - ``` - -:::tip -Execute seus testes no seu código em produção para estar mais próximo ao seu site real após deploy. -::: - -#### Avançado: Iniciando um servidor web de desenvolvimento durante os testes - -Você também pode fazer com que o Playwright inicie seu servidor ao executar seu script de testes usando a opção de [`webServer`](https://playwright.dev/docs/test-advanced#launching-a-development-web-server-during-the-tests) no arquivo de configuração do Playwright. - -Aqui está um exemplo da configuração e dos comandos necessários utilizando o npm: - -1. Adicione um script de teste no arquivo `package.json` na raiz do projeto, como `"test:e2e": "playwright test"`. -1. Em `playwright.config.ts`, adicione o objeto `webServer` e atualize o valor de `command` para `npm run preview`. - - ```js title="playwright.config.ts" ins={4-9} "npm run preview" - import { defineConfig } from '@playwright/test'; - - export default defineConfig({ - webServer: { - command: 'npm run preview', - url: 'http://localhost:4321/', - timeout: 120 * 1000, - reuseExistingServer: !process.env.CI, - }, - use: { - baseURL: 'http://localhost:4321/', - }, - }); - ``` - -1. Execute `npm run build`, e em seguida execute `npm run test:e2e` para rodar os testes do Playwright. - -Mais informações sobre o Playwright podem ser encontradas nos links abaixo: - -- [Getting started with Playwright](https://playwright.dev/docs/intro) -- [Use a development server](https://playwright.dev/docs/test-webserver#configuring-a-web-server) diff --git a/src/content/docs/pt-br/guides/troubleshooting.mdx b/src/content/docs/pt-br/guides/troubleshooting.mdx deleted file mode 100644 index c9dc8cce16b14..0000000000000 --- a/src/content/docs/pt-br/guides/troubleshooting.mdx +++ /dev/null @@ -1,252 +0,0 @@ ---- -title: Solucionando Problemas -description: Precisa de ajuda? Travado em algo? Temos o que você precisa. -i18nReady: true ---- - -Astro providencia várias ferramentas diferentes para te ajudar a solucionar problemas e depurar o seu código. - -## Dicas e truques - -### Depuração com `console.log()` - -`console.log()` é um método simples, mas popular, de depurar seu código Astro. O local onde você escreve sua instrução `console.log()` determinará onde sua saída de depuração é impressa: - -```astro ---- -console.log('Oi! Estou no servidor. Isso vai aparecer no terminal que o Astro está executando.'); ---- - -<script> -console.log('Oi! Estou no navegador. Isso irá aparecer no console do seu browser.'); -</script> -``` - -Uma instrução `console.log()` no frontmatter do Astro sempre produzirá saída no **terminal** em que a CLI do Astro está sendo executada. Isso ocorre porque o Astro é executado no servidor e nunca no navegador. - -O código escrito ou importado dentro de uma tag `<script>` do Astro é executado no navegador. Qualquer instrução `console.log()` ou outra saída de depuração será impressa no **console do seu navegador**. - -### Depuração de componentes de framework - -[Componentes de framework](/pt-br/guides/framework-components/) (como React e Svelte) são únicos: eles são renderizados no lado do servidor por padrão, o que significa que a saída de depuração do `console.log()` será visível no terminal. No entanto, eles também podem ser hidratados para o navegador, o que pode fazer com que os logs de depuração também apareçam no navegador. - -Isso pode ser útil para depurar diferenças entre a saída do SSR e os componentes hidratados no navegador. - -### Componente `<Debug />` do Astro - -Para ajudar na depuração de seus componentes Astro, o Astro fornece um componente embutido `<Debug />` que renderiza qualquer valor diretamente em seu modelo HTML de componente. Isso é útil para depuração rápida no navegador sem precisar alternar entre o terminal e o navegador. - -```astro {2,7} ---- -import { Debug } from 'astro:components'; -const soma = (a, b) => a + b; ---- -<!-- Exemplo: Irá aparecer {resposta: 6} no navegador --> -<Debug resposta={soma(2, 4)} /> -``` - -O componente de depuração suporta uma variedade de opções de sintaxe para depuração ainda mais flexível e concisa: - -```astro {2,7-9} ---- -import { Debug } from 'astro:components'; -const soma = (a, b) => a + b; -const resposta = soma(2, 4); ---- -<!-- Exemplo: Todos os exemplos são equivalentes --> -<Debug resposta={soma(2, 4)} /> -<Debug {{resposta: soma(2, 4)}} /> -<Debug {resposta} /> -``` - -## Mensagens de Erro Comuns - -Aqui estão algumas mensagens de erro comuns que você pode encontrar no terminal, o que elas significam e o que fazer sobre elas. Consulte nosso [guia de referência de erros completo](/pt-br/reference/error-reference/) para uma lista completa de erros do Astro que você pode encontrar. - -### Cannot use import statement outside a module - -Em componentes Astro, tags `<script>` são movidas para o topo do escopo (hoisted) e carregadas como [módulos JS](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Modules) por padrão. Se você incluiu a [diretiva `is:inline`](/pt-br/reference/directives-reference/#isinline) ou qualquer outro atributo em sua tag, esse comportamento padrão é removido. - -**Solução**: Se você adicionou qualquer atributo a sua tag `<script>`, você também deve adicionar o atributo `type="module"` para ser capaz de usar declarações de importação. - -**Status**: Comportamento esperado do Astro, como pretendido. - -**Não tem certeza se este é o seu problema?** -Verifique nossas issues e veja se mais alguém reportou [esse problema](https://github.com/withastro/astro/issues?q=is%3Aissue+is%3Aopen+Cannot+use+import+statement)! - -### `document` (or `window`) is not defined - -Esse erro ocorre ao tentar acessar `document` ou `window` no servidor. - -Componentes Astro são executados no servidor, então você não pode acessar esses objetos específicos do navegador dentro do frontmatter. - -Componentes de frameworks são executados no servidor por padrão, então esse erro pode ocorrer ao acessar `document` ou `window` durante a renderização. - -**Solução**: Determine o código que chama `document` ou `window`. Se você não estiver utilizando `document` ou `window` diretamente e ainda está recebendo esse erro, verifique para ver se algum pacote que você está importando foi feito para ser executado no cliente. - -- Se o código está em um componente Astro, mova-o para uma tag `<script>` fora do frontmatter. Isso diz ao Astro para executar esse código no cliente, onde `document` e `window` estão disponíveis. - -- Se o código está em um componente de framework, tente acessar esses objetos após renderizar usando métodos de lifecycle (e.x. [`useEffect()`](https://react.dev/reference/react/useEffect) no React, [`onMounted()`](https://vuejs.org/api/composition-api-lifecycle.html#onmounted) no Vue e [`onMount()`](https://svelte.dev/docs#run-time-svelte-onmount) no Svelte). Você também pode prevenir o componente de ser renderizado no servidor ao adicionar a diretiva [`client:only`](/pt-br/reference/directives-reference/#clientonly). - -**Status**: Comportamento esperado do Astro, como pretendido. - -### Expected a default export - -Este erro pode ser lançado ao tentar importar ou renderizar um componente inválido, ou um que não está funcionando corretamente. (Esta mensagem em particular ocorre por causa da forma em que importar um componente de UI funciona no Astro.) - -**Solução**: Tente procurar erros em quaisquer componentes que você está importando e renderizando, e certifique-se que estão funcionando corretamente. Considere abrir um dos templates iniciais do Astro em [astro.new](https://astro.new) e tente solucionar o problema do seu componente em um projeto Astro mínimo. - -**Status**: Comportamento esperado do Astro, como pretendido. - -### Refused to execute inline script - -Você pode ver o seguinte erro no log do console do navegador: - -> Refused to execute inline script because it violates the following Content Security Policy directive: … - -Isso significa que a [Política de Segurança de Conteúdo](https://developer.mozilla.org/pt-BR/docs/Web/HTTP/CSP) (CSP) do seu site desativou a execução de tags `<script>` inline, que o Astro gera por padrão. - -**Solução:** Atualize sua CSP para incluir `script-src: 'unsafe-inline'` para permitir que scripts inline sejam executados. - -## Pegadinhas comuns - -### Meu componente não está sendo renderizado - -Primeiro, certifique-se de que você **importou o componente** no [script do seu componente `.astro`](/pt-br/basics/astro-components/#o-script-do-componente) ou no [arquivo `.mdx`](/pt-br/guides/markdown-content/#usando-componentes-no-mdx). - -Então verifique sua declaração de importação: - -- Estaria a sua importação vinculada ao lugar errado? (Verifique o caminho da importação.) - -- Sua importação tem o mesmo nome que o componente importado? (Verifique o nome do seu componente e se ele [segue a sintaxe do `.astro`](/pt-br/reference/astro-syntax/#diferenças-entre-astro-e-jsx).) - -- Você incluiu a extensão na importação? (Verifique se seu arquivo importado contém uma extensão. e.x. `.astro`, `.md`, `.jsx`, `.vue`, `.svelte`. Nota: Extensões de arquivo **não** são necessárias apenas para arquivos `.js(x)` e `.ts(x)`.) - -### Meu componente não é interativo - -Se o seu componente está sendo renderizado (veja acima) mas não está respondendo a interação do usuário, então você pode está esquecendo de uma [diretiva `client:*`](/pt-br/reference/directives-reference/#diretivas-de-cliente) para hidratar seu componente. - -Por padrão, um [componente de framework de UI não é hidratado no cliente](/pt-br/guides/framework-components/#hidratando-componentes-interativos). Se nenhuma diretiva `client:*` é providenciada, seu HTML é renderizado na página sem JavaScript. - -:::tip -[Componentes Astro](/pt-br/basics/astro-components/) são componentes de templating de apenas HTML sem nenhum runtime no lado do cliente. Porém, você pode utilizar uma tag `<script>` no template do seu componente Astro para enviar JavaScript ao navegador para que seja executado no escopo global. -::: - -### Cannot find package 'X' - -Se você encontrar um aviso `"Cannot find package 'react'"` (ou similar) ao iniciar o Astro, isso significa que você precisa instalar aquele pacote em seu projeto. Nem todos os gerenciadores de pacotes irão instalar as dependências de pares para você automaticamente. Se você estiver no Node v16+ e está utilizando npm, você não deve se preocupar com esta seção. - -React, por exemplo, é uma dependência de pares da integração `@astrojs/react`. Isso significa que você deve instalar os pacotes oficiais `react` e `react-dom` juntos da integração. Essa integração irá então utilizar esses pacotes automaticamente. - -```shell ins="react react-dom" -# Exemplo: Instale integrações e frameworks juntos -npm install @astrojs/react react react-dom -``` -Veja o [guia de integrações do Astro](/pt-br/guides/integrations-guide/) para instruções em como adicionar renderers de frameworks, ferramentas de CSS e outros pacotes no Astro. - -### `Astro.glob()` - no matches found - -Quando estiver utilizando `Astro.glob` para importar arquivos, certifique-se de que você utilizou a sintaxe de glob correta que irá encontrar todos os arquivos que você precisa. - -#### Caminhos de arquivo - -Por exemplo, utilize `../components/**/*.js` em `src/pages/index.astro` para importar ambos os arquivos a seguir: -- `src/components/MeuComponente.js` -- `src/components/inclui/MeuOutroComponente.js` - -#### Valores Suportados - -`Astro.glob()` não suporta variáveis dinâmicas e interpolação de strings. - -Isto não é um bug no Astro. Isso acontece por conta de uma limitação na [função `import.meta.glob()` do Vite](https://vite.dev/guide/features.html#glob-import) que apenas suporta string literals estáticas. - -Uma solução comum é no lugar importar um largo conjunto de arquivos que inclui todos os arquivos que você precisa utilizando `Astro.glob()` e então os filtrar: - -```astro {6-7} ---- -// src/components/destaque.astro -const { slugPostagem } = Astro.props; -const caminhoParaPostagemDestacada = `src/pages/blog/${slugPostagem}.md`; - -const postagens = await Astro.glob('../pages/blog/*.md'); -const minhaPostagemDestacada = postagens.find(post => post.file.includes(caminhoParaPostagemDestacada)); ---- - -<p> - Dê uma olhada na minha postagem favorita, <a href={minhaPostagemDestacada.url}>{minhaPostagemDestacada.frontmatter.titulo}</a>! -</p> -``` - -### Utilizando Astro com Yarn 2+ (Berry) - -Yarn 2+, também conhecido como Berry, utiliza uma técnica chamada [Plug'n'Play (PnP)](https://yarnpkg.com/features/pnp) para armazenar e gerenciar módulos Node e que pode [causar problemas](https://github.com/withastro/astro/issues/3450) durante a inicialização de um novo projeto Astro utilizando `create astro` ou enquanto você trabalha com Astro. Uma solução para este problema é definir a [propriedade `nodeLinker`](https://yarnpkg.com/configuration/yarnrc#nodeLinker) em `.yarnrc.yml` para `node-modules`: - -```yaml title=".yarnrc.yml" -nodeLinker: "node-modules" -``` - -### Adicionando dependências ao Astro em um monorepo - -Quando trabalhando com Astro em uma configuração monorepo, as dependências do projeto devem ser adicionadas no arquivo `package.json` de cada um dos projetos. - -Entretanto, você pode também querer usar o Astro na raiz do monorepo (ex. [projetos Nx recomendam instalar dependências na raiz](https://github.com/nrwl/nx/issues/3023#issuecomment-630558318)). Nesse caso, adicione manualmente as dependências relacionadas ao Astro (ex. `@astrojs/vue`, `astro-component-lib`) para a parte `vite.ssr.noExternal` da configuração do Astro para garantir que essas dependências sejam apropriadamente instaladas e empacotadas: - -```js -// astro.config.mjs -import { defineConfig } from 'astro/config' -export default defineConfig({ - vite: { - ssr: { - noExternal: [ - '@astrojs/vue', - 'astro-component-lib', - ] - } - } -}) -``` - -### Utilizando `<head>` em um componente - -No Astro, utilizar uma tag `<head>` funciona como qualquer outra tag HTML: ela não é movida para o topo da página ou combinada com a `<head>` existente. Por causa disso, você geralmente apenas quer incluir uma tag `<head>` pela a página. Nós recomendamos escrever aquela única `<head>` e seus conteúdos em um [componente de layout](/pt-br/basics/layouts/). - -### Um `<script>` ou `<style>` inesperado foi incluído - -Você pode notar as tags `<script>` ou `<style>` de um componente importado no seu código-fonte HTML mesmo que o componente não apareça no resultado final. Por exemplo, isso irá ocorrer com componentes [renderizados condicionalmente](/pt-br/reference/astro-syntax/#html-dinâmico) que não são mostrados. - -O processo de build do Astro trabalha no gráfico de módulos: assim que um componente é incluído no template, suas tags `<script>` e `<style>` são processadas, otimizadas e passam por bundle, independente de aparecer no resultado final ou não. Isso não se aplica a scripts quando a diretiva `is:inline` é aplicada. - -## Criando reproduções mínimas - -Enquanto estiver procurando a solução de problemas em seu código, pode ser útil criar uma **reprodução mínima** do problema que você possa compartilhar. Isto seria um projeto Astro menor e simplificado que demonstra seu problema. Tendo uma reprodução funcional em um novo projeto ajuda a confirmar que este é um problema repetível, e não é causado por outra coisa em seu ambiente pessoal ou projeto existente. - -Compartilhar uma reprodução mínima é útil quando estiver pedindo por ajuda em nossas threads de suporte e é muitas vezes obrigatória quando estiver registrando um relatório de bug para o Astro. - -### Crie um StackBlitz pelo [astro.new](https://astro.new) - -Você pode usar [astro.new](https://astro.new) para criar um novo projeto Astro em um único clique. Para reproduções mínimas, nós recomendamos fortemente começar a partir do exemplo mínimo (vazio) rodando no [StackBlitz](https://stackblitz.com), com o mínimo de código extra possível. - -StackBlitz vai rodar esse projeto Astro no navegador, fora do seu ambiente local. Ele também vai te fornecer um link compartilhável para que qualquer mantenedor do Astro ou membro da equipe de suporte possa ver a sua reprodução mínima fora de seus próprios ambientes locais. Isso significa que todos estão vendo exatamente o mesmo projeto, com as mesmas configurações e dependências. Isso torna fácil para alguém ajudar a resolver os problemas em seu código. Se o problema é reproduzível, isso permite que você verifique que o problema está dentro do próprio código do Astro e você pode se sentir confiante enviando um relatório de bug. - -Note que nem todos os problemas são reproduzíveis no StackBlitz. Por exemplo, seu problema pode ser dependente de um ambiente específico, ou gerenciador de pacotes, ou pode envolver streaming de HTML, que não é suportado no StackBlitz. Nesse caso, crie um projeto Astro mínimo (vazio) usando o CLI, reproduza o problema, e envie o projeto para um repositório do GitHub. Ao invés de compartilhar a URL do StackBlitz, forneça o link para o repositório GitHub da sua reprodução mínima. -### Código mínimo - -Uma vez que seu projeto vazio esteja configurado, prossiga com os passos para reproduzir seu problema. Isso pode incluir adicionar pacotes, mudar configurações e escrever código. - -Você deve adicionar somente o mínimo de código necessário para reproduzir o problema. Não reproduza outros elementos do seu projeto existente, e remove todo o código que não é diretamente relacionado com o problema. - -### Crie uma issue - -Se seu problema pode ser reproduzido, então é hora de criar uma issue e registrar um relatório de bug! - -Vá para o repositório apropriado do Astro no GitHub e abre uma nova issue. A maioria dos repositórios possuem um modelo de issue que vai fazer perguntas ou solicitar informações para poder enviar. É importante que você siga esses modelos por que se você não providenciar as informações que nós precisamos, então teremos que pedir pra você por elas... e ninguém estará trabalhando na sua issue! - -Inclua o link para a sua reprodução mínima no StackBlitz (ou repositório do GitHub, se necessário). Comece com uma descrição do que era esperado em comparação com o comportamento real para fornecer contexto para a issue. Depois, inclua claramente, instruções passo a passo de como replicar o problema em um projeto Astro. - -## Precisa de mais? - -Venha e fale conosco no [Discord](https://astro.build/chat) e explique seu problema no canal `#support`. Nós estamos sempre felizes em ajudar! - -Visite os atuais [issues abertos no Astro](https://github.com/withastro/astro/issues/) para ver se você está enfrentando um problema conhecido ou para reportar um bug. - -Você também pode visitar as [Discussões de RFC](https://github.com/withastro/rfcs/discussions/) para ver se você encontrou uma limitação conhecida do Astro, e verifique para ver se existem propostas atuais relacionadas ao seu caso de uso. diff --git a/src/content/docs/pt-br/guides/typescript.mdx b/src/content/docs/pt-br/guides/typescript.mdx deleted file mode 100644 index 57fecf1b18c40..0000000000000 --- a/src/content/docs/pt-br/guides/typescript.mdx +++ /dev/null @@ -1,331 +0,0 @@ ---- -title: TypeScript -description: Aprenda como utilizar o suporte integrado a TypeScript do Astro. -i18nReady: true ---- -import Since from '~/components/Since.astro' -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -Astro vem com suporte integrado para [TypeScript](https://www.typescriptlang.org/). Você pode importar arquivos `.ts` e `.tsx` em seu projeto Astro, escrever código TypeScript dentro de seu [componente Astro](/pt-br/basics/astro-components/#o-script-do-componente), e até mesmo utilizar um arquivo [`astro.config.ts`](/pt-br/guides/configuring-astro/#o-arquivo-de-configuração-astro) se você quiser. - -Usando TypeScript, você pode evitar erros em tempo de execução ao definir os formatos dos objetos e componentes no seu código. Por exemplo, se você usa TypeScript para definir o [tipo das props do seu componente](#propriedades-de-componentes), você vai receber um erro no seu editor se você definir uma prop que seu componente não aceita. - -Você não precisa escrever código TypeScript nos seus projetos com Astro para se beneficiar dele. O Astro sempre trata seu código do componente como TypeScript, e a [extensão para VSCode do Astro](/pt-br/editor-setup/) vai inferir o tanto quanto pode para fornecer preenchimento automático, dicas e erros no seu editor. - -O servidor de desenvolvimento do Astro não executará nenhuma checagem de tipos, mas você pode usar um [script separado](#checagem-de-tipos) para checar erros de tipo pela linha de comando. - -## Configuração -Projetos iniciais do Astro incluem um arquivo `tsconfig.json` no seu projeto. Mesmo que você não escreva código TypeScript, esse arquivo é importante para que ferramentas como o Astro e o VS Code saibam como entender o seu projeto. Algumas funcionalidades (como importação de pacotes do npm) não são completamente suportadas em nosso editor sem um arquivo `tsconfig.json`. Se você instalar Astro manualmente, certifique-se de criar esse arquivo. - -### Templates TypeScript - -Três templates extensíveis de `tsconfig.json` são inclusos no Astro: `base`, `strict` e `strictest`. O template `base` habilita suporte para funcionalidades modernas do JavaScript e também é usado como uma base para os outros templates. Nós recomendamos usar `strict` (estrito) ou `strictest` (mais estrito) se você planeja escrever TypeScript em seu projeto. Você pode ver e comparar a configuração dos três templates em [astro/tsconfigs/](https://github.com/withastro/astro/blob/main/packages/astro/tsconfigs/). - -Para herdar de um dos templates, utilize [a opção `extends`](https://www.typescriptlang.org/tsconfig#extends): - -```json title="tsconfig.json" -{ - "extends": "astro/tsconfigs/base" -} -``` - -Adicionalmente, nossos templates incluem um arquivo `env.d.ts` dentro do diretório `src` para providenciar [tipos de cliente do Vite](https://vite.dev/guide/features.html#client-types) para seu projeto: - -```typescript title="env.d.ts" -/// <reference path="../.astro/types.d.ts" /> -``` - -### Plugin TypeScript para editores - -O [plugin Astro TypeScript](https://www.npmjs.com/package/@astrojs/ts-plugin) pode ser instalado separadamente quando você não estiver utilizando a [extensão oficial Astro VS Code](https://marketplace.visualstudio.com/items?itemName=astro-build.astro-vscode). Esse plugin é instalado automaticamente e configurado pela extensão VSCode, e você não precisa instalar os dois. - -Esse plugin executa apenas no editor. Ao executar `tsc` no terminal, arquivos `.astro` são completamente ignorados. Em vez disso, você pode usar [o comando CLI `astro check`](/pt-br/reference/cli-reference/#astro-check) para conferir ambos arquivos `.astro` e `.ts`. -Esse plugin também suporta importar arquivos `.astro` de arquivos `.ts` (que podem ser úteis para re-exportar). - -<PackageManagerTabs> - <Fragment slot="npm"> - ```shell - npm install @astrojs/ts-plugin - ``` - </Fragment> - <Fragment slot="pnpm"> - ```shell - pnpm add @astrojs/ts-plugin - ``` - </Fragment> - <Fragment slot="yarn"> - ```shell - yarn add @astrojs/ts-plugin - ``` - </Fragment> -</PackageManagerTabs> - -Então, adicione o seguinte no seu `tsconfig.json`: - -```json title="tsconfig.json" - "compilerOptions": { - "plugins": [ - { - "name": "@astrojs/ts-plugin" - }, - ], - } -``` - -Para checar que o plugin está funcionando, crie um arquivo `.ts` e importe um componente do Astro nele. Você não deve ter nenhuma mensagem de aviso do seu editor. - - -### Frameworks de UI - -Se o seu projeto utiliza um [framework de UI](/pt-br/guides/framework-components/), configurações adicionais dependendo do framework podem ser necessárias. Por favor veja a documentação do TypeScript do seu framework para mais informações. ([Vue](https://vuejs.org/guide/typescript/overview.html#using-vue-with-typescript), [React](https://react-typescript-cheatsheet.netlify.app/docs/basic/setup), [Preact](https://preactjs.com/guide/v10/typescript), [Solid](https://www.solidjs.com/guides/typescript)) - -## Importações de Tipos - -Utilize importações e exportações explícitas de tipos sempre que possível. - -```js del={1} ins={2} ins="type" -import { AlgumTipo } from './script'; -import type { AlgumTipo } from './script'; -``` - -Dessa forma, você evita casos extremos onde o bundler do Astro pode tentar incorretamente fazer bundle do seus tipos importados como se fossem JavaScript. - -Você pode configurar o TypeScript para aplicar importações de tipos no seu arquivo `tsconfig.json`. Defina [`verbatimModuleSyntax`](https://www.typescriptlang.org/tsconfig#verbatimModuleSyntax) como `true`. O TypeScript verificará suas importações e informará quando `import type` deve ser usado. Esta configuração é habilitada por padrão em todas as nossas predefinições. - -```json title="tsconfig.json" ins={3} - { - "compilerOptions": { - "verbatimModuleSyntax": true - } - } -``` - -## Aliases de Importação - -Astro suporta [aliases de importação](/pt-br/guides/imports/#aliases) que você define na configuração `paths` do seu `tsconfig.json`. [Leia nosso guia](/pt-br/guides/imports/#aliases) para aprender mais. - - -```astro title="src/pages/sobre/nate.astro" "@components" "@layouts" ---- -import OlaMundo from '@components/OlaMundo.astro'; -import Layout from '@layouts/Layout.astro'; ---- -``` - -```json title="tsconfig.json" {5-6} -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@components/*": ["src/components/*"], - "@layouts/*": ["src/layouts/*"] - } - } -} -``` - -## Estendendo `window` e `globalThis` - -Você pode querer adicionar uma propriedade para o objeto global. Você pode fazer isso adicionando declarações de nível superior usando a palavra-chave `declare` ao seu arquivo `env.d.ts`: - -```ts title="env.d.ts" -declare var minhaString: string; -declare function minhaFuncao(): boolean; -``` - -Isso fornecerá tipos para `globalThis.minhaString` e `globalThis.minhaFuncao`, assim como para `window.minhaString` e `window.minhaFuncao`. - -Note que `window` só está disponível no código no lado do cliente. O `globalThis` está disponível no lado do servidor e no lado do cliente, mas seu valor no lado do servidor não é compartilhado com o cliente. - -Se você só quer definir o tipo de uma propriedade no objeto `window`, forneça uma interface `Window` ao invés disso: - -```ts title="env.d.ts" -interface Window { - minhaFuncao(): boolean; -} -``` - -## Propriedades de Componentes - -O Astro suporta a tipagem das propriedades dos seus componentes via TypeScript. Para habilitar, adicione uma interface TypeScript `Props` ao frontmatter do seu componente. Uma declaração `export` pode ser utilizada, mas não é necessária. A [extensão para VSCode do Astro](/pt-br/editor-setup/) automaticamente buscará pela interface `Props` e oferecerá suporte TypeScript adequado quando você utilizar aquele componente dentro de outro template. -```astro title="src/components/OlaProps.astro" ins={2-5} ---- -interface Props { - nome: string; - saudacao?: string; -} -const { saudacao = 'Olá', nome } = Astro.props; ---- -<h2>{saudacao}, {nome}!</h2> -``` - -### Padrões comuns de tipos de prop - -- Se seu componente não recebe props ou conteúdo em slot, você pode usar `type Props = Record<string, never>`. - -- Se seu componente deve receber filhos em seu slot padrão, você pode impor isso usando `type Props = { children: any; };`. - -## Utilitários de Tipagem - -<Since v="1.6.0" /> - -O Astro vem com alguns tipos utilitários integrados para padrões de tipo de props comuns. Eles estão disponíveis dentro do entrypoint `astro/types`. - -### Atributos HTML integrados - -O Astro fornece os tipos `HTMLAttributes` para checar que sua marcação está usando atributos HTML válidos. Você pode usar esses tipos para ajudar a construir as props de componentes. - -Por exemplo, se você está construindo um componente `<Link>`, você pode fazer o seguinte para espelhar os atributos padrão de tags `<a>` nos tipos da prop do seu componente. - -```astro title="src/components/Link.astro" ins="HTMLAttributes" ins="HTMLAttributes<'a'>" ---- -import type { HTMLAttributes } from 'astro/types'; -// use um `type` -type Props = HTMLAttributes<'a'>; -// ou estenda com uma `interface` -interface Props extends HTMLAttributes<'a'> { - minhaProp?: boolean; -} -const { href, ...attrs } = Astro.props; ---- -<a href={href} {...attrs}> - <slot /> -</a> -``` - -Também é possível estender as definições JSX padrões para adicionar atributos que não são padrões redeclarando o namespace `astroHTML.JSX` em um arquivo `d.ts`. - -```ts -// src/custom-attributes.d.ts - -declare namespace astroHTML.JSX { - interface HTMLAttributes { - 'data-count'?: number; - 'data-label'?: string; - } - - // Adiciona uma propriedade CSS personalizada ao objeto de estilo - interface CSSProperties { - '--theme-color'?: 'black' | 'white'; - } -} -``` - -:::note -`astroHTML` é injetado globalmente dentro de componentes `.astro`. Para utilizá-lo em arquivos TypeScript, utilize uma [diretiva de barra tripla](https://www.typescriptlang.org/pt/docs/handbook/triple-slash-directives.html): - -```ts -/// <reference types="astro/astro-jsx" /> - -type MeusAtributos = astroHTML.JSX.ImgHTMLAttributes; -``` -::: - -### `ComponentProps` type - -<p><Since v="4.3.0" /></p> - -Esta exportação de tipo permite que você referencie as `Props` aceitas por outro componente, mesmo que o componente não exporte o tipo `Props` diretamente. - -O exemplo seguinte mostra a utilidade de usar `ComponentProps` de `astro/types` para referenciar os tipos `Props` de um componente `<Button />`: - -```astro title="src/pages/index.astro" ---- -import type { ComponentProps } from 'astro/types'; - -import Button from "./Button.astro"; - -type ButtonProps = ComponentProps<typeof Button>; ---- -``` - -### Tipo polimórfico - -<p><Since v="2.5.0" /></p> - -Astro inclui um utilitário para tornar mais fácil construir componentes que podem renderizar como elementos HTML diferentes com total segurança de tipo. Isso é útil para componentes como `<Link>` que podem renderizar como `<a>` ou `<button>` dependendo das props passadas para ele. - -O exemplo abaixo implementa um componente totalmente tipado e polimórfico que pode renderizar como qualquer elemento HTML. O tipo [`HTMLTag`](#atributos-html-integrados) é usado para garantir que a prop `as` é um elemento HTML válido. - -```astro ---- -import type { HTMLTag, Polymorphic } from 'astro/types'; - -type Props<Tag extends HTMLTag> = Polymorphic<{ as: Tag }>; - -const { as: Tag, ...props } = Astro.props; ---- - -<Tag {...props} /> -``` - -### Inferir tipos de `getStaticPaths()` - -<p><Since v="2.1.0" /></p> - -Astro inclui utilitários para trabalhar com os tipos retornados pela sua função [`getStaticPaths()`](/pt-br/reference/routing-reference/#getstaticpaths) para rotas dinâmicas. - -Você pode obter o tipo de [`Astro.params`](/pt-br/reference/api-reference/#params) com `InferGetStaticParamsType` e o tipo de [`Astro.props`](/pt-br/reference/api-reference/#props) com `InferGetStaticPropsType`: - -```astro title="src/pages/posts/[...slug].astro" {2,14-15} ---- -import type { InferGetStaticParamsType, InferGetStaticPropsType, GetStaticPaths } from 'astro'; - -export const getStaticPaths = (async () => { - const posts = await getCollection('blog'); - return posts.map((post) => { - return { - params: { slug: post.slug }, - props: { draft: post.data.draft, title: post.data.title }, - }; - }); -}) satisfies GetStaticPaths; - -type Params = InferGetStaticParamsType<typeof getStaticPaths>; -type Props = InferGetStaticPropsType<typeof getStaticPaths>; - -const { slug } = Astro.params as Params; -// ^? { slug: string; } -const { title } = Astro.props; -// ^? { draft: boolean; title: string; } ---- -``` - -## Checagem de Tipos - -Para ver erros de tipagem em seu editor, por favor certifique-se de que você tem a [extensão Astro para VS Code](/pt-br/editor-setup/) instalada. Por favor note que os comandos `astro start` e `astro build` irão transpilar o código com esbuild, porém não executarão nenhuma checagem de tipos. Para prevenir o seu código de fazer build quando conter erros de TypeScript, mude o seu script "build" no `package.json` para o seguinte: - -```json title="package.json" del={2} ins={3} ins="astro check &&" - "scripts": { - "build": "astro build", - "build": "astro check && astro build", - }, -``` - -:::note -`astro check` verifica todos os arquivos incluídos em seu projeto TypeScript. Para verificar tipos em arquivos Svelte e Vue, você pode usar os pacotes [`svelte-check`](https://www.npmjs.com/package/svelte-check) e [`vue-tsc`](https://www.npmjs.com/package/vue-tsc), respectivamente. -::: - -import ReadMore from '~/components/ReadMore.astro' - -<ReadMore>Leia mais sobre [a importação de arquivos `.ts`](/pt-br/guides/imports/#typescript) no Astro.</ReadMore> - -<ReadMore>Leia mais sobre [Configuração TypeScript](https://www.typescriptlang.org/tsconfig/).</ReadMore> - -## Solução de Problemas - -### Erros ao fazer a tipagem de múltiplos frameworks JSX ao mesmo tempo - -Um problema pode surgir ao se utilizar múltiplos frameworks JSX no mesmo projeto, já que cada framework requer configurações diferentes, e às vezes até conflitantes, dentro de `tsconfig.json`. - -**Solução**: Defina a [configuração `jsxImportSource`](https://www.typescriptlang.org/tsconfig#jsxImportSource) para `react` (padrão), `preact` ou `solid-js` dependendo do seu framework mais utilizado. Então, utilize um [comentário pragma](https://www.typescriptlang.org/docs/handbook/jsx.html#configuring-jsx) dentro de qualquer arquivo conflitante de outro framework. - -Para a opção padrão de `jsxImportSource: react`, você usaria: - -```jsx -// Para Preact -/** @jsxImportSource preact */ - -// Para Solid -/** @jsxImportSource solid-js */ -``` diff --git a/src/content/docs/pt-br/guides/upgrade-to/v2.mdx b/src/content/docs/pt-br/guides/upgrade-to/v2.mdx index 16cd743f5b03a..c992e283bb65c 100644 --- a/src/content/docs/pt-br/guides/upgrade-to/v2.mdx +++ b/src/content/docs/pt-br/guides/upgrade-to/v2.mdx @@ -224,7 +224,7 @@ export default defineConfig({ #### Adicionado: Mais opções de configuração MDX para se igualar ao Markdown -Astro v2.0 permite que você agora defina individualmente [cada opção da configuração Markdown disponível](/pt-br/reference/configuration-reference/#opções-de-markdown) (exceto `drafts`) separadamente na sua configuração da integração MDX. +Astro v2.0 permite que você agora defina individualmente [cada opção da configuração Markdown disponível](/pt-br/reference/configuration-reference/#markdown-options) (exceto `drafts`) separadamente na sua configuração da integração MDX. ```js // astro.config.mjs diff --git a/src/content/docs/pt-br/guides/upgrade-to/v3.mdx b/src/content/docs/pt-br/guides/upgrade-to/v3.mdx deleted file mode 100644 index 5157d9da92eb9..0000000000000 --- a/src/content/docs/pt-br/guides/upgrade-to/v3.mdx +++ /dev/null @@ -1,684 +0,0 @@ ---- -title: Atualize para o Astro v3 -description: Como atualizar seu projeto para a versão mais recente do Astro (v3.0). -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -Este guia vai te ajudar a migrar do Astro v2 para o Astro v3. - -Precisa atualizar um projeto antigo para a v2? Veja nosso [antigo guia de migração](/pt-br/guides/upgrade-to/v2/). - -## Atualize Astro - -Atualize a versão do Astro de seu projeto para a versão mais recente utilizando seu gerenciador de pacotes. Se você está utilizando integrações Astro, por favor também as atualize para a versão mais recente. - -<PackageManagerTabs> - <Fragment slot="npm"> - ```shell - # Atualize para Astro v3.x - npm install astro@latest - - # Exemplo: atualize as integrações React e Tailwind - npm install @astrojs/react@latest @astrojs/tailwind@latest - ``` - </Fragment> - <Fragment slot="pnpm"> - ```shell - # Atualize para v3.x - pnpm add astro@latest - - # Exemplo: atualize as integrações React e Tailwind - pnpm add @astrojs/react@latest @astrojs/tailwind@latest - ``` - </Fragment> - <Fragment slot="yarn"> - ```shell - # Atualize para v3.x - yarn add astro@latest - - # Exemplo: atualize as integrações React e Tailwind - yarn add @astrojs/react@latest @astrojs/tailwind@latest - ``` - </Fragment> -</PackageManagerTabs> - -:::note[É necessário continuar?] -Após atualizar Astro para a versão mais recente, você pode não precisar fazer quaisquer mudanças ao seu projeto afinal! - -Porém, se você notar erros ou comportamentos inesperados, por favor veja abaixo o que mudou que pode precisar ser atualizado em seu projeto. -::: - -## Flags Experimentais Removidas do Astro v3.0 - -Remova as seguintes flags experimentais de `astro.config.mjs`: - -```js del={5-8} -// astro.config.mjs -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - experimental: { - assets: true, - viewTransitions: true, - }, -}) -``` - -Essas funcionalidades agora estão disponíveis por padrão: - -- Transições de Visualização para transições de página animadas e ilhas persistentes. Veja as [mudanças radicais da API de transições de visualização e dicas para atualização](/pt-br/guides/view-transitions/#atualize-para-v30-da-v2x) se você estava utilizando essa flag experimental. -- Uma nova API de serviço de imagem `astro:assets` para utilizar imagens no Astro, incluindo um novo componente `<Image />` e a função `getImage()`. Por favor leia as detalhadas [dicas de atualização para imagens](/pt-br/guides/images/#atualize-para-v30-da-v2x) **se você estava ou não utilizando essa flag experimental** para ver como isso pode afetar seu projeto. - -Leia mais sobre essas duas funcionalidades eletrizantes e mais na [postagem do blog sobre a 3.0](https://astro.build/blog/astro-3/)! - - - -## Mudanças Radicais do Astro v3.0 - -Astro v3.0 inclui algumas mudanças radicais, assim como a remoção de algumas funcionalidades anteriormente depreciadas. Se o seu projeto não funciona como esperado após atualizar para a v3.0, veja este guia para uma visão geral sobre todas as mudanças radicais e instruções em como atualizar sua base de código. - -Veja o [registro de mudanças](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md) para as notas completas do lançamento. - -### Removido: Suporte para o Node 16 - -Node 16 está marcado para chegar seu Fim de Vida em setembro de 2023. - -Astro v3.0 tira o suporte para Node 16 completamente para que todos os usuários do Astro se aproveitem das funcionalidades mais modernas do Node. - -#### O que devo fazer? - - Verifique eu tanto seu ambiente de desenvolvimento quanto seu ambiente de deployment estão utilizando **Node `18.14.1` ou superior**. - -1. Verifique sua versão local do Node utilizando: - - ```sh - node -v - ``` - - - -2. Verifique a própria documentação do seu [ambiente de deployment](/pt-br/guides/deploy/) para verificar que ele suporta Node 18. - - Você pode especificar Node `18.14.1` para seu projeto Astro tanto em uma opção da configuração do painel de controle ou em um arquivo `.nvmrc`. - - ```bash title=".nvmrc" - 18.14.1 - ``` - -### Removido: Suporte para TypeScript 4 - -Na Astro v2.x, as predefinições de `tsconfig.json` incluiam suporte para ambos TypeScript 4.x e 5.x. - -Astro v3.0 atualiza as predefinições de `tsconfig.json` para apenas suportar TypeScript 5.x. Astro agora assume que você utiliza TypeScript 5.0 (Março de 2023), ou que seu editor o inclui (e.x. VS Code 1.77). - -#### O que devo fazer? - -Se você tem o TypeScript instalado localmente, atualize pelo menos para a v5.0. - -```bash -npm install typescript@latest --save-dev -``` - -### Removido: `@astrojs/image` - -No Astro v2.x, Astro oferecia uma integração de imagens oficial que incluia os componentes Astro `<Image />` e `<Picture />`. - -Astro v3.0 remove essa integração da base de código completamente. A nova solução para imagens do Astro é uma API integrada de serviços de imagem: `astro:assets`. - -#### O que devo fazer? - -Remova a integração `@astrojs/image` do seu projeto. Você irá precisar não só desinstalar a integração mas também atualizar ou remover quaisquer declarações de importação e quaisquer componentes `<Image />` e `<Picture />` existentes. Você também vai precisar configurar um serviço de processamento de imagem padrão de sua preferência. - -Você irá encontrar [instruções passo a passo completas para remover a integração de imagens antiga](/pt-br/guides/images/#remova-astrojsimage) em nosso guia de Imagens. - -Migrar para `astro:assets` também irá trazer algumas novas opções de imagem e funcionalidades que você pode desejar utilizar agora. Por favor veja as [dicas de atualização para imagens da v3.0](/pt-br/guides/images/#atualize-para-v30-da-v2x) para mais detalhes! - -```js del={3,7} -// astro.config.mjs -import { defineConfig } from 'astro/config'; -import image from '@astrojs/image'; - -export default defineConfig({ - integrations: [ - image(), - ] -}) -``` - -### Removido: Componente `<Markdown />` - -No Astro v1.x, Astro depreciou o componente `<Markdown />` e o moveu para um pacote externo. - -Astro v3.0 remove completamente o pacote `@astrojs/markdown-component`. O componente `<Markdown />` do Astro não irá mais funcionar no seu projeto. - -#### O que devo fazer? - -Remova todas as instâncias de `@astrojs/markdown-component`. - -```astro del={2} title="src/components/MeuComponenteAstro.astro" ---- -import Markdown from '@astrojs/markdown-component'; ---- -``` - -Para continuar utilizando um componente `<Markdown />` similar no seu código, considere utilizar [integrações da comunidade](https://astro.build/integrations/) assim como [`astro-remote`](https://github.com/natemoo-re/astro-remote). Certifique-se de atualizar as importações e atributos do seu componente `<Markdown />` conforme necessário, de acordo com a documentação da própria integração. - -Como alternativa, delete todas as referências importando o componente `<Markdown />` do Astro e o próprio componente em seus arquivos `.astro`. Você vai precisar escrever novamente seu conteúdo como HTML diretamente ou [importar Markdown](/pt-br/guides/markdown-content/#importando-markdown) de um arquivo `.md`. - -### Removido: APIs depreciadas da 1.x - -No Astro v1.x, Astro depreciou nossas configurações originais assim como o suporte a `<style global>` e `<script hoist>`. Entretanto, esses ainda foram suportados por compatibilidade com versões anteriores. - -Astro v3.0 remove essas APIs depreciadas completamente. As [definições de configuração](/pt-br/reference/configuration-reference/) oficialmente suportadas e a sintaxe moderna `<style is:global>` e `<script>` devem ser usadas ao invés disso. - -#### O que devo fazer? - -Se você continua utilizando APIs da v1.x, utilize as novas APIs para cada uma das funcionalidades no lugar: - -- Opções depreciadas da configuração: Veja [o guia de migração da 0.26](/pt-br/guides/upgrade-to/v1/#new-configuration-api) -- Tipos de atributo de script/style depreciados: Veja [o guia de migração da 0.26](/pt-br/guides/upgrade-to/v1/#new-default-script-behavior) - -### Removido: Correções parciais para APIs da Web no código do servidor - -No Astro v2.x, Astro forneceu correções parciais para APIs da Web como `document` ou `localStorage` em código renderizado pelo servidor. Essas correções eram muitas vezes incompletas e não confiáveis. - -Astro v3.0 remove essas correções parciais inteiramente. APIs da Web não estão mais disponíveis em código renderizado pelo servidor. - -#### O que devo fazer? - -Se você está usando APIs da Web em componentes renderizados pelo servidor, você vai precisar de ou fazer uso dessas APIs condicionalmente ou usar [a diretiva de cliente `client:only`](/pt-br/reference/directives-reference/#clientonly). - -### Removido: `image` do `astro:content` no esquema de coleções de conteúdo - -No Astro v2.x, a API de coleções de conteúdo depreciou a exportação `image` do `astro:content` utilizada no esquema de suas coleções de conteúdo. - -Astro v3.0 remove essa exportação completamente. - -#### O que devo fazer? - -Se você está utilizando o `image()` depreciado do `astro:content`, o remova, já que ele não existe mais. Valide imagens através do [utilitário `image` de `schema`](/pt-br/guides/images/#atualize-esquemas-de-coleções-de-conteúdo) no lugar: - - ```ts title="src/content/config.ts" del={1} ins={2} "({ image })" -import { defineCollection, z, image } from "astro:content"; -import { defineCollection, z } from "astro:content"; - - defineCollection({ - schema: ({ image }) => - z.object({ - image: image(), - }), -}); -``` - -### Removido: nomes de temas do Shiki pré-0.14 - -No Astro v2.x, alguns nomes de tema do Shiki foram renomeados, mas os nomes originais foram mantidos por compatibilidade com versões anteriores. - -Astro v3.0 remove os nomes originais em favor dos nomes de tema renomeados. - -#### O que devo fazer? - -Se o seu projeto utiliza qualquer um dos temas abaixo, os renomeie para seu nome atualizado: - -- `material-darker` -> `material-theme-darker` -- `material-default` -> `material-theme` -- `material-lighter` -> `material-theme-lighter` -- `material-ocean` -> `material-theme-ocean` -- `material-palenight` -> `material-theme-palenight` - -### Removido: Funcionalidades do `class:list` - -No Astro v2.x, a [diretiva `class:list`](/pt-br/reference/directives-reference/#classlist) utilizava uma implementação customizada, inspirada por [`clsx`](https://github.com/lukeed/clsx) com algumas funcionalidades extras como desduplicação e suporte para `Set`. - -Astro v3.0 agora utiliza `clsx` diretamente para `class:list`, que não suporta desduplicação ou valores `Set`. - -#### O que devo fazer? - -Substitua quaisquer elementos `Set` passados para a diretiva `class:list` com um `Array` plano. - -```astro title="src/components/MeuComponenteAstro.astro" del={4} ins={5} -<Componente class:list={[ - 'a', - 'b', - new Set(['c', 'd']) - ['c', 'd'] -]} /> -``` - -### Removido: passar `class:list` como uma prop - -No Astro v2.x, [valores de `class:list`](/pt-br/reference/directives-reference/#classlist) eram passados para componentes através de [`Astro.props['class:list']`](/pt-br/reference/api-reference/#props). - -Astro v3.0 normaliza valores de `class:list` em uma string antes de os enviar para componentes através de `Astro.props['class']` - -#### O que devo fazer? - -Remova qualquer código que espera receber a prop `class:list`. - -```astro title="src/components/MeuComponenteAstro.astro" del={2,3,7} ins={4,8} "classList" "'class:list': classList" ---- -import { clsx } from 'clsx'; -const { class: className, 'class:list': classList } = Astro.props; -const { class: className } = Astro.props; ---- -<div - class:list={[className, classList]} - class:list={[className]} -/> -``` - -### Removido: transformação de variáveis CSS de camelCase para kebab-case - -No Astro v2.x, [variáveis CSS](/pt-br/guides/styling/#variáveis-no-css) camelCase passadoas para o atributo `style` eram renderizadas tanto como camelCase (assim como foi escrito) como em kebab-case (mantido por compatibilidade com versões anteriores). - -Astro v3.0 remove a transformação para kebab-case de nomes de variáveis CSS em camelCase, e apenas a variável CSS original em camelCase é renderizada. - -```astro "meu-valor" ---- -// src/components/MeuComponenteAstro.astro -const meuValor = "red" ---- -<!-- input --> -<div style={{ "--meuValor": meuValor }}></div> - -<!-- resultado (Astro 2.x) --> -<div style="--meu-valor:var(--meuValor);--meuValor:red"></div> -<!-- resultado (Astro 3.0) --> -<div style="--meuValor:red"></div> -``` - -#### O que devo fazer? - -Se você dependia no Astro para transformar em kebab-case em seus estilos, atualize seus estilos existentes para camelCase para prevenir estilos faltando. Por exemplo: - -```astro del={3} ins={4} title="src/components/MeuComponenteAstro.astro" -<style> - div { - color: var(--meu-valor); - color: var(--meuValor); - } -</style> -``` - -### Removido: Planificação automática do valor de retorno de `getStaticPaths()` - -No Astro v2.x, o valor de retorno de [`getStaticPaths()`](/pt-br/reference/routing-reference/#getstaticpaths) era automaticamente planificado para te permitir retornar um array sem nenhum erro. - -Astro v3.0 remove a planificação automática do resultado de `getStaticPaths()`. - -#### O que devo fazer? - -Se você está retornando um array de arrays no lugar de um array de _objetos_ (como é esperado), `.flatMap` e `.flat` agora devem ser usados para garantir que você está retornando um array plano. - -Uma [mensagem de erro indicando que o valor de retorno de `getStaticPath()` deve ser um array de objetos](/pt-br/reference/errors/invalid-get-static-paths-entry/#o-que-deu-errado) será providenciado se você precisa atualizar seu código. - -### Movido: `astro check` agora requer um pacote externo - -No Astro v2.x, [`astro check`](/pt-br/reference/cli-reference/#astro-check) era incluso com o Astro por padrão, e suas dependências eram embutidas no Astro. Isso significava em um pacote maior, independente se você usava ou não `astro check`. Isso também te prevenia de ter controle sobre a versão do TypeScript e o Servidor de Linguagem do Astro a se utilizar. - - -Astro v3.0 move o comando `astro check` para fora do núcleo do Astro e agora requer o pacote externo `@astrojs/check`. Adicionalmente, você deve instalar `typescript` em seu projeto para utilizar o comando `astro check`. - -#### O que devo fazer? - -Execute o comando `astro check` após atualizar para o Astro v3.0 e siga as instruções para instalar as dependências necessárias, ou manualmente instale `@astrojs/check` e `typescript` em seu projeto. - -### Depreciado: `build.excludeMiddleware` e `build.split` - -No Astro v2.x, `build.excludeMiddleware` e `build.split` eram utilizados para mudar como arquivos específicos eram emitidos ao utilizar um adaptador no modo SSR. - -Astro v3.0 substitui essas opções de configuração da build com novas [opções de configuração de adaptadores SSR](/pt-br/guides/integrations-guide/#integrações-oficiais) para realizar as mesmas tarefas: `edgeMiddleware` e `functionPerRoute`. - -#### O que devo fazer? - -Atualize o arquivo de configuração do Astro para agora utilizar as novas opções **na configuração do adaptador** diretamente. - -```js title="astro.config.mjs" del={5-7} ins={9} -import { defineConfig } from "astro/config"; -import vercel from "@astrojs/vercel/serverless"; - -export default defineConfig({ - build: { - excludeMiddleware: true - }, - adapter: vercel({ - edgeMiddleware: true - }), -}); -``` - -```js title="astro.config.mjs" del={5-7} ins={9} -import { defineConfig } from "astro/config"; -import netlify from "@astrojs/netlify/functions"; - -export default defineConfig({ - build: { - split: true - }, - adapter: netlify({ - functionPerRoute: true - }), -}); -``` - -### Depreciado: `markdown.drafts` - -No Astro v2.x, a configuração `markdown.drafts` te permitia ter páginas de rascunho que eram disponibilizadas ao executar o servidor de desenvolvimento, mas não na build para produção. - -Astro v3.0 deprecia essa funcionalidade em favor do método de coleções de conteúdo de manipular páginas de rascunho filtrando manualmente no lugar, o que te dá mais controle sobre a funcionalidade. - -#### O que devo fazer? - -Para continuar a marcar algumas páginas em seu projeto como rascunhos, [migue para coleções de conteúdo](/pt-br/guides/content-collections/#migrando-do-roteamento-baseado-em-arquivos) e [filtre páginas manualmente](/pt-br/guides/content-collections/#filtrando-consultas-de-coleção) com a propriedade do frontmatter `draft: true` no lugar. - -### Depreciado: retornar um objeto simples de endpoints - -No Astro v2.x, endpoints podiam retornar um objeto simples, que seria convertido para uma resposta JSON. - -Astro v3.0 deprecia esse comportamento em favor de retornar um objeto `Response` diretamente. - -#### O que devo fazer? - -Atualize seus endpoints para reotrnar um objeto `Response` diretamente. - -```ts title="endpoint.json.ts" del={2} ins={3} -export async function GET() { - return { body: { "titulo": "Blog do Bob" }}; - return new Response(JSON.stringify({ "titulo": "Blog do Bob" })); -} -``` - -Se você realmente precisar manter o formato anterior, você pode utilizar o objeto `ResponseWithEncoding`, mas isso será depreciado no futuro. - -```ts title="endpoint.json.ts" del={2} ins={3} -export async function GET() { - return { body: { "titulo": "Blog do Bob" } }; - return new ResponseWithEncoding({ body: { "titulo": "Blog do Bob" }}); -} -``` - -### Padrão alterado: `verbatimModuleSyntax` nas predefinições de tsconfig.json - -No Astro v2.x, a configuração [`verbatimModuleSyntax`](https://www.typescriptlang.org/tsconfig#verbatimModuleSyntax) era desativada por padrão, com seu equivalente `importsNotUsedAsValues` do TypeScript 4.x sendo habilitado na predefinição `strict`. - -No Astro v3.0, `verbatimModuleSyntax` está habilitado em todas as predefinições. - -#### O que devo fazer? - -Esta opção requer que os tipos sejam importados usando a sintaxe `import type`. - -```astro title="src/components/MeuComponenteAstro.astro" "type" ---- -import { type CollectionEntry, getEntry } from "astro:content"; ---- -``` - -Enquanto nós recomendamos manter ele ativado e apropriadamente fazer suas importações de tipo com `type` (como mostrado acima), você pode desativar ele definindo `verbatimModuleSyntax: false` no seu arquivo `tsconfig.json` se isso causa algum problema. - -```json title="tsconfig.json" "false" -{ - "compilerOptions": { - "verbatimModuleSyntax": false - } -} -``` - -### Padrão modificado: porta `3000` - -No Astro v2.x, Astro era executado na porta `3000` por padrão. - -Astro v3.0 muda a [porta padrão](/pt-br/reference/cli-reference/#--port-numero) para `4321`. 🚀 - -#### O que devo fazer? - -Atualize quaisquer referências a `localhost:3000`, por exemplo em testes ou em seu `README`, para refletir a nova porta `localhost:4321`. - - -### Padrão modificado: import.meta.env.BASE_URL `trailingSlash` - -No Astro v2.x, `import.meta.env.BASE_URL` anexava sua opção [`base`](/pt-br/reference/configuration-reference/#base) com [`trailingSlash`](/pt-br/reference/configuration-reference/#trailingslash) por padrão. `trailingSlash: "ignore"` também anexava com uma barra final. - -Astro v3.0 não mais anexa `import.meta.env.BASE_URL` com uma barra final por padrão, nem quando `trailingSlash: "ignore"` é definido. (O comportamento existente de `base` em combinação com `trailingSlash: "always"` ou `trailingSlash: "never"` não mudou.) - -#### O que devo fazer? - -Se sua `base` já tem uma barra final, nenhuma mudança é necessária. - -Se sua `base` não tem uma barra final, adicione uma se você deseja preservar o comportamento padrão anterior (ou `trailingSlash: "ignore"`): - -```js title="astro.config.mjs" del={4} ins={5} -import { defineConfig } from "astro/config"; - -export default defineConfig({ - base: 'minha-base', - base: 'minha-base/', -}); -``` - -### Padrão modificado: `compressHTML` - -No Astro v2.x, Astro apenas comprimia seu HTML emitido quando [`compressHTML`](/pt-br/reference/configuration-reference/#compresshtml) era explicitamente definido como `true`. O valor padrão era `false`. - -Astro v3.0 agora comprime HTML emitido por padrão. - -#### O que devo fazer? - -Agora você pode remover `compressHTML: true` de sua configuração já que esse é o novo comportamento padrão. - -```js title="astro.config.mjs" del={4} -import { defineConfig } from "astro/config"; - -export default defineConfig({ - compressHTML: true -}) -``` - -Agora você deve definir `compressHTML: false` para optar por sair da compressão de HTML. - -### Padrão modificado: `scopedStyleStrategy` - -No Astro v2.x, o valor padrão de [`scopedStyleStrategy`](/pt-br/reference/configuration-reference/#scopedstylestrategy) era `"where"`. - -Astro v3.0 introduz um novo valor padrão: `"attribute"`. Por padrão, estilos agora são aplicados utilizando atributos `data-*`. - -#### O que devo fazer? - -Para manter o [escopo dos estilos](/pt-br/guides/styling/#estilos-com-escopo), atualize o arquivo de configuração para o valor padrão anterior: - - -```js title="astro.config.mjs" ins={4} -import { defineConfig } from "astro/config"; - -export default defineConfig({ - scopedStyleStrategy: "where" -}) -``` - -### Padrão modificado: `inlineStyleSheets` - -No Astro v2.x, todas as folhas de estilo foram enviadas como tags link por padrão. Você poderia optar por adicioná-las inline em tags `<style>` toda vez com `"always"`, ou adicionar inline apenas folhas de estilo abaixo de um certo tamanho com `"auto"` definindo a configuração [`build.inlineStylesheets`](/pt-br/reference/configuration-reference/#buildinlinestylesheets). A opção padrão era `"never"`. - -Astro v3.0 modifica o valor padrão de `inlineStylesheets` para `"auto"`. Folhas de estilo menores que `ViteConfig.build.assetsInlineLimit` (padrão: 4kb) são adicionadas inline por padrão. Caso contrário, estilos do projeto eram enviados como folhas de estilo externas. - -#### O que devo fazer? -Se você quer manter o comportamento atual do seu projeto, defina `build.inlineStylesheets` para o padrão anterior, `"never"`: - - -```js title="astro.config.mjs" ins={4-6} -import { defineConfig } from "astro/config"; - -export default defineConfig({ - build: { - inlineStylesheets: "never" - } -}) -``` - -### Padrão modificado: serviço de imagem - -No Astro v2.x, Squoosh era o [serviço padrão de processamento de imagem](/pt-br/guides/images/#serviço-de-imagem-padrão). - -Astro v3.0 agora inclui Sharp como o novo serviço de processamento de imagem padrão e fornece uma opção da configuração para utilizar Squoosh no lugar. - -#### O que devo fazer? - -:::note -Ao usar um [gerenciador de pacotes rigoroso](https://pnpm.io/pnpm-vs-npm#npms-flat-tree) como o `pnpm`, talvez seja necessário instalar o Sharp manualmente o seu projeto, mesmo que seja uma dependência do Astro: - -```bash -pnpm add sharp -``` -::: - -Se você preferir continuar a usar Squoosh para transformar suas imagens, atualize sua configuração com o seguinte: - -```ts title="astro.config.mjs" ins={4-6} -import { defineConfig, squooshImageService } from "astro/config"; - -export default defineConfig({ - image: { - service: squooshImageService(), - } -}) -``` - -### Modificado: Capitalização dos métodos de requisição HTTP - -No Astro v2.x, [métodos de requisição HTTP](/pt-br/guides/endpoints/#métodos-http) eram escritos usando nomes de função em letras minúsculas: `get`, `post`, `put`, `all` e `del`. - -Astro v3.0 utiliza nomes de função em letras maiúsculas, incluindo `DELETE` ao invés de `del`. - -#### O que devo fazer? - -Renomeie todas as funções para seus equivalentes em letras maiúsculas: - -- `get` para `GET` -- `post` para `POST` -- `put` para `PUT` -- `all` para `ALL` -- `del` para `DELETE` - -```js title="endpoint.ts" del={1} ins={2} -export function get() { -export function GET() { - return new Response(JSON.stringify({ "titulo": "Blog do Bob" })); -} -``` - -### Modificado: Configuração de múltiplos frameworks JSX - -No Astro v2.x, você poderia utilizar [múltiplas integrações de frameworks JSX](/pt-br/guides/integrations-guide/#integrações-oficiais) (React, Solid, Preact) no mesmo projeto sem precisar identificar quais arquivos pertenciam a qual framework. - -Astro v3.0 agora requer que você especifique qual framework utilizar para seus arquivos com as novas opções `include` e `exclude` da configuração de integrações quando você tiver integrações de frameworks JSX instaladas. Isso permite Astro suportar melhor o uso de um único framework, assim como funcionalidades avançadas como Fast Refresh do React. - -#### O que devo fazer? - -Se você estiver utilizando múltiplos frameworks JSX no mesmo projeto, defina `include` (e opcionalmente `exclude`) como um array de arquivos e/ou pastas. Coringas podem ser utilizados para incluir o caminho de múltiplos arquivos. - -Nós recomendamos colocar componentes de frameworks em comum na mesma pasta (e.x. `/components/react/` e `/components/solid/`) para fazer especificar suas inclusões mais fácil, mas isso não é necessário: - -```js ins={13,16,19} -import { defineConfig } from 'astro/config'; -import preact from '@astrojs/preact'; -import react from '@astrojs/react'; -import svelte from '@astrojs/svelte'; -import vue from '@astrojs/vue'; -import solid from '@astrojs/solid-js'; - -export default defineConfig({ - // Habilite múltiplos frameworks a suportarem todos os tipos de componentes. - // Nenhum `include` é necessário se você está usando apenas um único framework! - integrations: [ - preact({ - include: ['**/preact/*'] - }), - react({ - include: ['**/react/*'] - }), - solid({ - include: ['**/solid/*'], - }), - ] -}); -``` - -### Modificado: `Astro.cookies.get(key)` pode retornar `undefined` - -No Astro v2.x, `Astro.cookies.get(key)` sempre retornaria um objeto `AstroCookie`, mesmo se o cookie não existisse. Para verificar sua existência, você precisava utilizar `Astro.cookies.has(key)`. - -Astro v3.0 retorna `undefined` em `Astro.cookies.get(key)` se o cookie não existir. - -#### O que devo fazer? - -Esta mudança não irá quebrar nenhum código que verifica pela existência do objeto `Astro.cookie` antes de utilizar `Astro.cookies.get(key)`, mas não é mais necessário. - -Você pode com segurança remover qualquer código que utiliza `has()` para verificar se o valor de `Astro.cookies` é `undefined`: - -```js del={1-3} ins={5-7} -if (Astro.cookies.has(id)) { - const id = Astro.cookies.get(id)!; -} - -const id = Astro.cookies.get(id); -if (id) { -} -``` - -### Modificado: executando a CLI do Astro programaticamente - -No Astro v2.x, o entrypoint do pacote `"astro"` exportava e executava a CLI do Astro diretamente. Não é recomendado executar Astro dessa forma na prática. - -Astro v3.0 remove a CLI do entrypoint, e exporta um novo conjunto de APIs experimentais JavaScript, incluindo `dev()`, `build()`, `preview()` e `sync()`. - -#### O que devo fazer? - -Para [executar a CLI do Astro programaticamente](/pt-br/reference/cli-reference/#apis-avançadas-experimental), utilize as novas APIs JavaScript experimentais: - -```js -import { dev, build } from "astro"; - -// Inicie o servidor de desenvolvimento do Astro -const devServer = await dev(); -await devServer.stop(); - -// Faça a build do seu projeto Astro -await build(); -``` - - -### Modificado: caminhos de exportação do entrypoint interno da API do Astro - -No Astro v2.x, você poderia importar APIs internas do Astro a partir de `astro/internal/*` e `astro/runtime/server/*`. - -Astro v3.0 remove os dois entrypoints em favor do entrypoint existente `astro/runtime/*`. Adicionalmente, uma nova exportação `astro/compiler-runtime` foi adicionada para código em runtime específico do compilador. - -#### O que devo fazer? - -Esses entrypoints são para APIs internas do Astro e não devem afetar seu projeto. Mas se você utiliza esses entrypoints, atualize como mostrado abaixo: - -```js del={1,4,10} ins={2,5,11} -import 'astro/internal/index.js'; -import 'astro/runtime/server/index.js'; - -import 'astro/server/index.js'; -import 'astro/runtime/server/index.js'; -``` - -```js ins={5} del={4} -import { transform } from '@astrojs/compiler'; - -const resultado = await transform(source, { - internalURL: 'astro/runtime/server/index.js', - internalURL: 'astro/compiler-runtime', - // ... -}); -``` - -## Recursos da Comunidade - -Conhece um bom recurso para Astro v3.0? [Edite esta página](https://github.com/withastro/docs/edit/main/src/content/docs/en/guides/upgrade-to/v3.mdx) e adicione um link abaixo! - -## Problemas Conhecidos - -Atualmente, não há problemas conhecidos. diff --git a/src/content/docs/pt-br/guides/upgrade-to/v4.mdx b/src/content/docs/pt-br/guides/upgrade-to/v4.mdx deleted file mode 100644 index dc969953559e3..0000000000000 --- a/src/content/docs/pt-br/guides/upgrade-to/v4.mdx +++ /dev/null @@ -1,385 +0,0 @@ ---- -title: Atualize para o Astro v4 -description: Como atualizar seu projeto para a versão mais recente do Astro (v4.0). -i18nReady: true ---- -import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro' - -Este guia vai te ajudar a migrar do Astro v3 para o Astro v4. - -Precisa atualizar um projeto antigo para a v3? Veja nosso [antigo guia de migração](/pt-br/guides/upgrade-to/v3/). - -Precisa ver a documentação da v3? Visite essa [versão antiga do site de documentação (snapshot v3.6 não mantido)](https://docs-git-v3-docs-unmaintained-astrodotbuild.vercel.app/). - -## Atualize o Astro - -Atualize a versão do Astro e de todas as integrações oficiais em seu projeto para a versão mais recente utilizando seu gerenciador de pacotes. - -<PackageManagerTabs> - <Fragment slot="npm"> - ```shell - # Atualiza o Astro e integrações oficiais juntos - npx @astrojs/upgrade - ``` - </Fragment> - <Fragment slot="pnpm"> - ```shell - # Atualiza o Astro e integrações oficiais juntos - pnpm dlx @astrojs/upgrade - ``` - </Fragment> - <Fragment slot="yarn"> - ```shell - # Atualiza o Astro e integrações oficiais juntos - yarn dlx @astrojs/upgrade - ``` - </Fragment> -</PackageManagerTabs> - -Você também pode atualizar suas integrações do Astro manualmente se preferir, e você pode precisar atualizar outras dependências no seu projeto. - -:::note[É necessário continuar?] -Após atualizar Astro para a versão mais recente, você pode não precisar fazer quaisquer mudanças ao seu projeto afinal! - -Porém, se você notar erros ou comportamentos inesperados, por favor veja abaixo o que mudou que pode precisar ser atualizado em seu projeto. -::: - -Astro v4.0 inclui [mudanças potencialmente radicais](#mudanças-radicais), assim como [remoção de funcionalidades anteriormente descontinuadas](#funcionalidades-previamente-descontinuadas-agora-removidas). - -Se seu projeto não funcionar como o esperado após atualizar para a v4.0, veja esse guia para uma visão geral de todas as mudanças radicais e instruções sobre como atualizar sua base de código. - -Veja o [registro de mudanças](https://github.com/withastro/astro/blob/main/packages/astro/CHANGELOG.md) para as notas completas do lançamento. - -## Flags Experimentais Removidas no Astro v4.0 - -Remova a flag experimental `devOverlay` e mova qualquer configuração `i18n` para o primeiro nível em `astro.config.mjs`: - -```js del={5-9} ins={11-14} title="astro.config.mjs" -import { defineConfig } from 'astro/config'; - -export default defineConfig({ - experimental: { - devOverlay: true, - i18n: { - defaultLocale: "en", - locales: ["en", "fr", "pt-br", "es"], - } - }, - i18n: { - defaultLocale: "en", - locales: ["en", "fr", "pt-br", "es"], - }, -}) -``` - -Essas configurações, `i18n` e o renomeado `devToolbar` agora estão disponíveis no Astro v4.0. - -Leia mais sobre essas excitantes nos funcionalidades no [blog post v4.0](https://astro.build/blog/astro-4/)! - -## Atualizações - -Toda atualização major de dependências do Astro pode causar mudanças radicais em seu projeto. - -### Atualizado: Vite 5.0 - -No Astro v3.0, Vite 4 foi utilizado como o servidor de desenvolvimento e bundler de produção. - -Astro v4.0 atualiza do Vite 4 para o Vite 5. - -#### O que eu preciso fazer? - -Se você estiver utilizando plugins, configurações, ou APIs específicos do Vite, veja o [guia de migração do Vite](https://pt.vite.dev/guide/migration) para saber as mudanças radicais deles e atualize seu projeto conforme necessário. Não há mudanças radicais no próprio Astro. - -### Atualizado: dependências de unified, remark, e rehype - -No Astro v3.0, unified v10 e seus pacotes remark/rehype compatíveis relacionados foram utilizados para procesar Markdown e MDX. - -Astro v4.0 atualiza [unified para v11](https://github.com/unifiedjs/unified/releases/tag/11.0.0) e os outros pacotes remark/rehype para a última versão. - -#### O que eu preciso fazer? - -Se você utiliza pacotes remark/rehype customizados, atualize todos eles para a última versão utilizando o seu gerenciador de pacotes para garantir que eles suportem unified v11. Os pacotes que você está usando podem ser encontrados em `astro.config.mjs`. - -Não deve haver nenhuma mudança radical significativa se você estiver utilizando pacotes ativamente atualizados, mas alguns pacotes podem ainda não ser compatíveis com o unified v11. -Inspecione visualmente suas páginas Markdown/MDX antes de fazer um deploy para garantir que seu site está funcionando como o planejado. - -## Mudanças radicais - -As seguintes mudanças são consideradas mudanças radicais no Astro. Mudanças radicais podem manter temporariamente compatibilidade com versões anteriores ou não, e toda a documentação é atualizada para se referir exclusivamente ao código suportado atual. - -Se você precisar consultar a documentação para um projeto v3.x, você pode acessar esse [snapshot (não mantido) da docs de antes da v4.0 ser lançada](https://docs-git-v3-docs-unmaintained-astrodotbuild.vercel.app/). - -### Renomeado: `entrypoint` (API de Integrações) - -No Astro v3.x, a propriedade da API de integrações `injectRoute` que especificava o ponto de entrada da rota foi nomeado `entryPoint`. - -Astro v4.0 renomeia essa propriedade para `entrypoint` para ser consistente com outras APIs Astro. A propriedade `entryPoint` foi descontinuada, mas ainda continua a funcionar e emite um aviso requisitando que atualize seu código. - -#### O que eu preciso fazer? - -Se você tiver integrações que usem a API `injectRoute`, renomeie a propriedade `entryPoint` para `entrypoint`. Se você é autor de uma biblioteca que quer suportar tanto Astro 3 quanto 4, você pode especicar ambos `entryPoint` e `entrypoint`, nesse caso, nenhum aviso será emitido. - -```js ins={4} del={3} -injectRoute({ - pattern: '/fancy-dashboard', - entryPoint: '@fancy/dashboard/dashboard.astro' - entrypoint: '@fancy/dashboard/dashboard.astro' -}); -``` - -### Alterado: assinatura de `app.render` na API de Integrações - -No Astro v3.0, o método `app.render()` aceitava `routeDate` e `locals` como argumentos separados, ambos opcionais. - -Astro v4.0 muda a assinatura de `app.render()`. Essas duas propriedades agora estão disponíveis em um único objeto. Tanto o objeto quanto essas duas propriedades ainda são opcionais. - -#### O que eu preciso fazer? - -Se você mantém um adaptador, a assinatura atual continuará funcionando até a próxima versão major. Para migrar para a nova assinatura, passe `routeData` e `local` como propriedades de um objeto ao invés de múltiplos argumentos independentos. - -```diff lang="js" -- app.render(request, routeData, locals) -+ app.render(request, { routeData, locals }) -``` - -### Alterado: adaptadores agora devem especificar funcionalidades suportadas - -No Astro v3.0, adaptadores não era obrigados a especificar as funcionalidades que suportavam. - -Astro v4.0 requer que adaptadores passem a propriedade `supportedAstroFeatures` para especificar a lista de funcionalidades que suportam. Essa propriedade não é mais opcional. - -#### O que eu preciso fazer? - -Autores de adaptadores precisam passar a opção `supportedAstroFeatures` para especificar a lista de funcionalidades que suportam. - -```js title="meu-adaptador.mjs" ins={9-11} -export default function createIntegration() { - return { - name: '@matthewp/meu-adaptador', - hooks: { - 'astro:config:done': ({ setAdapter }) => { - setAdapter({ - name: '@matthewp/meu-adaptador', - serverEntrypoint: '@matthewp/meu-adaptador/server.js', - supportedAstroFeatures: { - staticOutput: 'stable' - } - }); - }, - }, - }; -} -``` - -### Removido: propriedade `path` de linguagem do Shiki - -No Astro v3.x, a linguagem do Shiki passada para `markdown.shikiConfig.langs` era automaticamente convertida para uma linguagem compatível com Shikiji. Shikiji é a ferramenta interna utilizada para syntax highlight pelo Astro. - -Astro v4.0 remove o suporte à propriedade `path` de uma linguagem do Shiki, que era confusa de configurar. Ela foi substituída por um import que pode ser passado `langs` diretamente. - -#### O que eu preciso fazer? - -O arquivo JSON de linguagem deve ser importado e passado para a opção correta. - -```diff lang="js" -// astro.config.js -+ import customLang from './custom.tmLanguage.json' - -export default defineConfig({ - markdown: { - shikiConfig: { - langs: [ -- { path: '../../custom.tmLanguage.json' }, -+ customLang, - ], - }, - }, -}) -``` - -## Descontinuado - -As seguntes funcionalidades descontinuadas não são mais suportadas nem documentadas. Por favor, atualize seu projeto conforme apropriado. - -Algumas funcionalidades descontinuadas podem continuar funcionando temporariamente até serem completamente removidas. Outras podem silenciosamente não ter nenhum efeito, ou causar um erro requisitando que atualize seu código. - -### Descontinuado: `handleForms` para eventos `submit` em Transições de Visualização - -No Astro v3.x, projetos utilizando o componente `<ViewTransitions />` precisavam optar por tratar eventos `submit` para elementos `form`. Isso era feito passando a prop `handleForms`. - -Astro v4.0 trata eventos `submit` para elementos `form` por padrão quando `<ViewTransitions />` é utilizado. A prop `handleForms` foi descontinuada e não tem mais nenhum efeito. - -#### O que eu devo fazer? - -Remova a propriedade `handleForms` do seu componente `<ViewTransitions />`. Ela não é mais necessária. - -```astro title="src/pages/index.astro" del="handleForms" ---- -import { ViewTransitions } from "astro:transitions"; ---- -<html> - <head> - <ViewTransitions handleForms /> - </head> - <body> - <!-- stuff here --> - </body> -</html> -``` - -Para optar por não ter o tratamento dos eventos `submit`, adicione o atributo `data-astro-reload` nos elementos `form` relevantes. - -```astro title="src/components/Form.astro" ins="data-astro-reload" -<form action="/contact" data-astro-reload> - <!-- --> -</form> -``` - -## Funcionalidades previamente descontinuadas agora removidas - -As seguintes funcionalidades descontinuadas foram agora inteiramente removidas da base de código enão podem mais ser usadas. Algumas dessas funcionalidades podem ter continuado a funcionar em seu projeto mesmo depois de serem descontinuadas. Outras podem ter silenciosamente ficado sem efeito. - -Agora projetos contendo essas funcionalidades removidas ficaram impossibilitados de fazer o build, e não haverá mais qualquer documentação auxiliar pedindo-lhe para remover essas funcionalidades. - -### Removido: retornar objetos simples de endpoints - -No Astro v3.x, retornar objetos simples de endpoints foi descontinuado, mas ainda era suportado para manter compatibilidade com Astro v2. O utilitário `ResponseWithEncoding` também foi disponibilizado para facilitar a migração. - -Astro v4.0 remove o suporte a objetos simples e exige que endpoints sempre retornem uma resposta (`Respons`). O utilitário `ResponseWithEncoding` também foi removido em favor do tipo `Response` apropriado. - -#### O que eu preciso fazer? - -Atualize seus endpoints para retornarem um objeto `Response` diretamente. - -```diff lang="ts" - export async function GET() { -- return { body: { "title": "Bob's blog" }}; -+ return new Response(JSON.stringify({ "title": "Bob's blog" })); - } -``` - -Para remover o uso de `ResponseWithEncoding`, refatore seu código para utilizar um `ArrayBuffer` no lugar: - -```diff lang="ts" - export async function GET() { - const file = await fs.readFile('./bob.png'); -- return new ResponseWithEncoding(file.toString('binary'), undefined, 'binary'); -+ return new Response(file.buffer); - } -``` - -### Removido: `build.split` e `build.excludeMiddleware` - -No Astro v3.0, as opções da configuração de build `build.split` e `build.excludeMiddleware` foram descontinuadas e substituídas por [opções de configuração de adaptadores](/pt-br/reference/adapter-reference/#funcionalides-do-adaptador) que cumprem a mesma tarefa. - -Astro v4.0 remove completamente essas propriedades. - -#### O que eu preciso fazer? - -Se você está utilizando as opções descontinuadas `build.split` ou `build.excludeMiddleware`, você deve agora removê-las visto que elas não existem mais. - -Por favor veja o guia de migração v3 para [substituir essas propriedades descontinuadas do middleware](/pt-br/guides/upgrade-to/v3/#depreciado-buildexcludemiddleware-e-buildsplit) por configurações de adaptador. - -### Removido: `Astro.request.params` - -No Astro v3.0, a API `Astro.request.params` foi descontinuada, mas preservada por compatibilidade com versões anteriores. - -Astro v4.0 remove completamente essa opção. - -#### O que eu preciso fazer? - -Atualize todas as ocorrências para [`Astro.params`](/pt-br/reference/api-reference/#params), que é o substituto suportado. - -```astro del={1} ins={2} -const { id } = Astro.request.params; -const { id } = Astro.params; -``` - -### Removido: `markdown.drafts` - -No Astro v3.0, utilizar `markdown.drafts` para controlar o build de rascunhos foi descontinuado. - -Astro v4.0 remove completamente essa opção. - -#### O que eu preciso fazer? - -Se você está utilizando a opção `markdown.drafts` descontinuada, você deve removê-la visto que ela não existe mais. - -Para continue a marcar algumas páginas de seu projeto como rascunho, [migre para coleções de conteúdo](/pt-br/guides/content-collections/#migrando-do-roteamento-baseado-em-arquivos) e [filtre manualmente as páginas](/pt-br/guides/content-collections/#filtrando-consultas-de-coleção) com a propriedade `draft: true` do frontmatter. - -### Removido: `getHeaders()` - -No Astro v3.0, o export `getHeaders()` de Markdowns foi descontinuado e substituído por `getHeadings()`. - -Astro v4.0 remove completamente essa opção. - -#### O que eu preciso fazer? - -Se você está utilizando o `getHeaders()` descontinuado, você deve removê-lo visto que ele não existe mais. Substitua todas as ocorrências por `getHeadings()`, que é o substituto suportado. - -```js del={2} ins={3} -const posts = await Astro.glob('../content/blog/*.mdx'); -const firstPostHeadings = posts.at(0).getHeaders(); -const firstPostHeadings = posts.at(0).getHeadings(); -``` - -### Removido: utilizar `rss` em `getStaticPaths()` - -No Astro v3.0, utilizar o utilitário descontinuado `rss` em `getStaticPaths()` soltaria um erro. - -Astro v4.0 remove completamente essa opção. - -#### O que eu preciso fazer? - -Se você está utilizando o método não suportado para gerar feeds RSS, você deve agora utilizar a [integração `@astrojs/rss`](/pt-br/recipes/rss/) para uma configuração RSS completa. - -### Removido: métodos HTTP em letras minúsculas - -No Astro v3.0, utilizar métodos de chamada HTTP em letras minúsculas (`get`, `post`, `put`, `all`, `del`) foi descontinuado. - -Astro v4.0 remove o suporte a métodos em letras minúsculas completamente. Todos os métodos de chamadas HTTML agora devem ser escritos com letras maiúsculas. - -#### O que eu preciso fazer? - -Se você está usando os nomes em letras minúsculas descontinuados, você deve substituí-los pelos equivalentes em letras maiúsculas. - -Por favor veja o guia de migração v3 para [orientações sobre o uso de métodos de chamada HTTP em letras maiúsculas](/pt-br/guides/upgrade-to/v3/#modificado-capitalização-dos-métodos-de-requisição-http). - -### Removido: redirecionamentos 301 na falta do prefixo `base` - -No Astro v3.x, o servidor de pré-visualização do Astro retornava um redirectionamento 301 ao acessar recursos do diretório `public` sem um caminho base. - -Astro v4.0 retorna um status 404 sem o prefixo do caminho base para recursos do diretório `public` quando o servidor de pré-visualização, replicando o comportamento do servidor de desenvolvimento. - -#### O que eu preciso fazer? - -Ao utilizar o servidor de pré-visualização do AStro, todos os imports e URLs de seus recursos estáticos do diretório `public` devem ter [o valor `base`](/pt-br/reference/configuration-reference/#base) prefixado ao caminho. - -```astro title="src/pages/index.astro" ins="/docs" -// To access public/images/my-image.png: - -<img src="/docs/images/my-image.png" alt=""> -``` - -### Removido: conversão automática de `astro/client-image` - -No Astro v3.x, o tipo `astro/client-image` (utilizado para a descontinuada integração de imagem) foi removido, mas automaticamente convertido para o tipo `astro/client` padrão do Astro se encontrado em seu arquivo `env.d.ts`. - -Astro v4.0 ignora `astro/client-image` e não vai mais atualizar `env.d.ts` automaticamente para você. - -#### O que eu preciso fazer? - -Se você tinha tipos configurados para `@astrojs/image` em `src/env.d.ts` e atualizar para v3.0 não converteu automaticamente o tipo para você, substitua o tipo `astro/client-image` manualmente por `astro/client`. - -```ts title="src/env.d.ts" del={1} ins={2} - /// <reference types="astro/client-image" /> - /// <reference types="astro/client" /> -``` - -## Recursos da comunidade - -Conhece algum bom recurso para Astro v4.0? [Edite essa página](https://github.com/withastro/docs/edit/main/src/content/docs/en/guides/upgrade-to/v4.mdx) e adicione um link abaixo! - -## Problemas conhecidos - -Por favor confira [as issues do Astro no GitHub](https://github.com/withastro/astro/issues/) por problemas reportados, ou para reportar um problema você mesmo. diff --git a/src/content/docs/pt-br/guides/view-transitions.mdx b/src/content/docs/pt-br/guides/view-transitions.mdx deleted file mode 100644 index b1818f3267cf8..0000000000000 --- a/src/content/docs/pt-br/guides/view-transitions.mdx +++ /dev/null @@ -1,599 +0,0 @@ ---- -title: Transições de Visualização -description: >- - Habilite navegação fluída entre páginas no Astro com transições de visualização. -i18nReady: true ---- - -import Since from '~/components/Since.astro' - -Astro suporta **transições de visualização, opcionais, por página** com apenas algumas linhas de código. Transições de visualização atualizam o conteúdo de sua página sem a atualização normal, atualizando a página inteira, do navegador e oferece animações suaves entre páginas. - -Astro oferece um componente de roteamento `<ViewTransitions />` que pode ser adicionado ao `<head>` de uma página para controlar as transições de página conforme você navega para outras páginas. Ele fornece um leve roteador no lado do cliente que [intercepta a navegação](#processo-de-navegação-no-lado-do-cliente) e permite você personalizar a transição entre páginas. - -Adicione esse componente em um componente `.astro` reutilizável, como um cabeçalho ou layout em comum, para ter [transições de página animadas através de todo o seu site (modo SPA)](#transições-de-visualização-em-todo-o-site-modo-spa). - -O suporte para transições de visualização do Astro é possível graças à nova API de [Transições de Visualização](https://developer.chrome.com/docs/web-platform/view-transitions/) do navegador e também inclui: - -- Algumas [opções de animação integradas](#diretivas-de-animação-integradas), como `fade`, `slide` e `none`. -- Suporte a animações de navegação tanto avançando quanto retornando. -- A habilidade de [customizar completamente todos os aspectos da animação de transição](#customizando-animações), e construir suas próprias animações. -- A opção de [impedir navegação no lado do cliente para links que não são páginas](#prevenção-de-navegação-do-lado-do-cliente). -- [Controle sobre o comportamento de fallback](#controle-de-fallback) para navegadores que ainda não suportam as APIs de Transição de Visualização. -- Suporte automático para [`prefers-reduced-motion`](#prefers-reduced-motion). - - -:::note -Por padrão, toda página irá utilizar a navegação regular, da página inteira, do navegador. Você deve optar pelas transições de visualização e pode utilizá-las seja por página ou no site inteiro. -::: - -## Adicionando Transições de Visualização em uma Página - -Opte por utilizar transições de visualização em páginas individuais importando e adicionando o componente de roteamento `<ViewTransitions />` ao `<head>` de toda página desejada. - -```astro title="src/pages/index.astro" ins={2,7} ---- -import { ViewTransitions } from 'astro:transitions'; ---- -<html lang="pt-BR"> - <head> - <title>Minha página inicial - - - -

Bem-vindo ao meu website!

- - -``` - -## Transições de visualização em todo o site (modo SPA) - -Importe e adicione o componente `` em seu `` comum ou componente de layout. Astro criará animações padrões baseado nas similaridades entre a página antiga e a nova e também oferecerá um comportamento de fallback para navegadores sem suporte. - -O exemplo abaixo mostra como adicionar as animações de navegação padrão do Astro em todo o site, incluindo a opção de controle de fallback padrão para navegadores sem suporte, ao importar e adicionar esse componente em um componente Astro ``: - -```astro title="components/HeadComum.astro" ins={2,12} ---- -import { ViewTransitions } from 'astro:transitions'; ---- - - - - -{title} - - - - -``` - -Nenhuma outra configuração é necessária para habilitar a navegação no lado do cliente padrão do Astro! - -Utilize [diretivas de transição](#diretivas-de-transição) ou [sobrescreva a navegação no lado do cliente padrão](#prevenção-de-navegação-do-lado-do-cliente) em elementos individuais para maior controle. - -## Diretivas de transição - -Astro atribuirá automaticamente a elementos correspondentes encontrados em ambas as páginas antiga e nova um `view-transition-name` compartilhado e único. Esse par de elementos associados é inferido tanto pelo tipo do elemento quanto por sua localização no DOM. - -Use diretivas `transition:*` opcionais em elementos da página em seus componentes `.astro` para exercer um controle fino sobre o comportamento da transição de página durante a navegação. - -- `transition:name`: Permite que você sobrescreva a associação de elementos padrão do Astro para animação de conteúdo antigo/novo e [especifica um nome de transição](#nomeando-uma-transição) para associar um par de elementos do DOM. -- `transition:animate`: Permite que você sobrescreva a animação padrão do Astro ao substituir o elemento antigo pelo elemento novo especificando um tipo de animação. Use as [diretivas de animação integradas](#diretivas-de-animação-integradas) do Astro ou [crie animações de transição customizadas](#customizando-animações). -- `transition:persist`: Permite que você sobrescreva o padrão do Astro de substituir elementos antigos por novos e [persista componentes e elementos HTML](#mantendo-estado) ao navegar para outra página. - - -### Nomeando uma transição - -Em alguns casos, você pode querer ou precisar identificar os elementos correspondentes em uma transição por conta própria. Você pode especificar um nome para um par de elementos utilizando a diretiva `transition:name`. - -```astro title="pagina-antiga.astro" -