Referência de plugins
Os plugins do Starlight podem personalizar a configuração, UI, e comportamento, além de serem fáceis de compartilhar e reutilizar. Essa página de referência documenta a API que os plugins tem acesso.
Aprenda mais sobre como usar um plugin do Starlight na Referência da Configuração ou visite o mostruário de plugins para ver uma lista de plugins disponíveis.
Referência rápida da API
Um plugin do Starlight segue o seguinte formato. Veja abaixo os detalhes das diferentes propriedades e parâmetros de hooks.
interface StarlightPlugin { name: string; hooks: { setup: (options: { config: StarlightUserConfig; updateConfig: (newConfig: StarlightUserConfig) => void; addIntegration: (integration: AstroIntegration) => void; astroConfig: AstroConfig; command: 'dev' | 'build' | 'preview'; isRestart: boolean; logger: AstroIntegrationLogger; }) => void | Promise<void>; };}name
tipo: string
Um plugin deve fornecer um nome único que o descreve. O nome é usado nas mensagens de log relacionadas ao plugin e pode ser utilizado por outros plugins para detectar a sua presença.
hooks
Hooks são funções que o Starlight chama para executar um código do plugin em momentos específicos. Atualmente, o Starlight suporta apenas o hook setup.
hooks.setup
Função de setup chamada quando o Starlight é iniciado (durante a execução do hook de integração astro:config:setup).
O hook setup pode ser utilizado para atualizar a configuração do Starlight ou adicionar integrações ao Astro.
Este hook é chamado com as seguintes opções:
config
tipo: StarlightUserConfig
Uma cópia somente leitura da configuração do Starlight fornecida pelo usuário. Essa configuração pode ter sido atualizada por outros plugins configurados antes desse.
updateConfig
tipo: (newConfig: StarlightUserConfig) => void
Uma função de callback para atualizar a configuração do Starlight fornecida pelo usuário. Forneça as chaves de configuração no nível-raiz que você quer sobrescrever. Para atualizar valores de configuração aninhados, você precisa fornecer todo o objeto aninhado.
Para estender uma configuração existente sem sobrescrevê-la, espalhe os valores existentes no novo valor.
No seguinte exemplo, uma nova conta de mídia social é adicionada à configuração existente espalhando o objeto config.social no novo objeto social:
export default { name: 'add-twitter-plugin', hooks: { setup({ config, updateConfig }) { updateConfig({ social: { ...config.social, twitter: 'https://twitter.com/astrodotbuild', }, }); }, },};addIntegration
tipo: (integration: AstroIntegration) => void
Uma função de callback para adicionar uma Integração Astro requerida pelo plugin.
No seguinte exemplo, o plugin primeiro verifica se a Integração de React do Astro está configurada, caso não esteja, usa addIntegration() para adicioná-la:
import react from '@astrojs/react';
export default { name: 'plugin-using-react', hooks: { setup({ addIntegration, astroConfig }) { const isReactLoaded = astroConfig.integrations.find( ({ name }) => name === '@astrojs/react' );
// Só adiciona a integração com o React se ela não estiver carregada. if (!isReactLoaded) { addIntegration(react()); } }, },};astroConfig
tipo: AstroConfig
Uma cópia somente leitura da configuração do Astro fornecida pelo usuário.
command
tipo: 'dev' | 'build' | 'preview'
O comando usado para executar o Starlight:
dev- O projeto é executado comastro devbuild- O projeto é executado comastro buildpreview- O projeto é executado comastro preview
isRestart
tipo: boolean
false quando o servidor de desenvolvimento é iniciado, true quando uma atualização é disparada.
Razões comuns para um reinicio incluem um usuário editando o arquivo astro.config.mjs enquanto o servidor de desenvolvimento está sendo executado.
logger
tipo: AstroIntegrationLogger
Uma instância do Astro logger que você pode usar para escrever logs. Todas as mensagens de log serão prefixadas com o nome do plugin.
export default { name: 'long-process-plugin', hooks: { setup({ logger }) { logger.info('Iniciando um processo longo…'); // Algum processo longo… }, },};O exemplo acima registrará um log que inclui a mensagem info fornecida:
[long-process-plugin] Iniciando um processo longo…