Visão geral
Três comandos cobrem todo o ciclo de desenvolvimento no Spraxium: spraxium dev para a iteração local, spraxium build para gerar um artefato de produção e spraxium start para executar esse artefato. Esta página reúne os três para que você entenda como eles se conectam sem precisar pular entre documentos.
spraxium dev
spraxium dev inicia um servidor de desenvolvimento que observa os arquivos e reinicia a aplicação automaticamente quando o código-fonte muda. Ele usa SWC para carregar TypeScript sem uma etapa separada de compilação, mantendo os reinícios rápidos mesmo em projetos grandes. O observador reage aos padrões glob include e exclude da sua configuração e aplica um debounce configurável para agrupar salvamentos rápidos em um único reinício.
spraxium devConfiguração do dev
export default {
dev: {
entrypoint: 'src/main.ts',
include: ['src/**'],
exclude: ['src/**/*.spec.ts'],
debounce: 300,
},
};As exclusões padrão estão sempre ativas
Mesmo sem um bloco de configuração, o observador ignora node_modules, .git e .spraxium para evitar ciclos de reinício causados por instalações de dependências ou artefatos de build.
Recuperação após falhas
Se o processo do bot falhar, o servidor de dev não encerra. Ele aplica um atraso com backoff exponencial antes de iniciar de novo, calculado como Math.min(1000 * 2 ** crashCount, maxBackoff). Isso evita um ciclo apertado de relançamentos quando a falha é reproduzível. Corrija o erro, salve o arquivo, e o observador fará um reinício normal.
spraxium build
spraxium build valida os tipos e produz um bundle pronto para produção. Ele roda em duas etapas sequenciais: primeiro a verificação de tipos e depois o bundler. Se a verificação falhar, o bundler nem chega a executar, então você recebe um código de saída limpo, confiável para pipelines de CI.
spraxium buildO que acontece
Verificação de tipos
Executa tsc --noEmit no seu projeto. Qualquer erro de tipo faz o comando
falhar imediatamente. Corrija todos os erros de TypeScript antes que o bundler possa continuar.
Empacotamento
Executa tsdown com a configuração do seu projeto. Se existir um arquivo
tsdown.config.* na raiz do projeto, a CLI o utiliza. Caso contrário, aplica estes padrões:
pontos de entrada src/main.ts e spraxium.config.ts, diretório de saída .spraxium/dist,
formato ESM, plataforma Node, --clean e --no-dts.
A saída compilada vai para .spraxium/dist/ por padrão. Esse diretório é o artefato que spraxium start procura.
O build não executa testes
Rodar spraxium build não executa sua suíte de testes. Rode os testes separadamente, antes ou depois, e trate o build apenas como uma etapa de validação de tipos e empacotamento.
spraxium start
spraxium start executa o artefato compilado produzido por spraxium build. Antes de iniciar, ele define NODE_ENV=production e herda o stdio do processo atual para que os logs da aplicação sejam exibidos diretamente no terminal.
spraxium startResolução do ponto de entrada
A CLI verifica os caminhos abaixo em ordem e executa o primeiro que encontrar:
.spraxium/dist/src/main.js.spraxium/dist/main.jsdist/src/main.jsdist/main.jsbuild/src/main.jsbuild/main.js
Sem build, não há start
Se nenhum dos caminhos candidatos existir, o comando falha e mostra uma mensagem pedindo para você executar spraxium build primeiro. Garanta que variáveis de ambiente como DISCORD_TOKEN estejam carregadas antes de rodar este comando.
Fluxo típico
Uma iteração completa, do desenvolvimento à produção, costuma seguir esta ordem: use spraxium dev durante o trabalho ativo, mude para spraxium build ao preparar uma release e, por fim, rode spraxium start para verificar ou implantar o artefato compilado. Em CI, pule totalmente a etapa de dev e execute build seguido de start como pipeline de validação.
Bloqueio de processo
O Spraxium grava um arquivo de lock por projeto em .spraxium/spraxium.lock ao iniciar e o remove em um desligamento limpo. Se uma segunda instância detectar esse lock, ela encerra com um aviso de conflito em vez de duplicar listeners e registros de comandos silenciosamente.
Flags
Tanto spraxium dev quanto spraxium start oferecem duas flags relacionadas ao lock:
| Flag | Variável de ambiente | Descrição |
|---|---|---|
| --force-unlock | SPRAXIUM_FORCE_UNLOCK=1 | Encerra o processo do bot existente, junto com o launcher do observador de dev para impedir um retorno automático, e então assume o controle. O terminal é liberado logo após o encerramento. |
| --no-lock | SPRAXIUM_NO_LOCK=1 | Pula totalmente a verificação de lock. Use isso apenas em cenários que executam instâncias concorrentes de propósito, como um ambiente de testes rodando ao lado da produção. |
# Kill the running instance and take over
spraxium dev --force-unlock
# Skip the lock check (concurrent instances allowed)
spraxium dev --no-lockLocks obsoletos deixados por processos que falharam são detectados automaticamente com process.kill(pid, 0) e removidos antes da inicialização, então você só verá avisos de conflito quando a outra instância realmente estiver em execução.
Notificador de atualização
Na inicialização, o Spraxium examina node_modules/@spraxium/* para encontrar todos os pacotes do framework instalados no projeto, consulta o registro do npm pelas versões mais recentes e mostra um aviso se algum pacote estiver desatualizado. Essa verificação roda em segundo plano e nunca atrasa a inicialização.
Os resultados são armazenados em cache em ~/.spraxium/upgrade-check.json, com TTL de 24 horas compartilhado por todos os projetos da máquina. Se um pacote tiver sido instalado recentemente e ainda não estiver no cache, apenas esse pacote será buscado, enquanto o restante usará os dados já armazenados.
Defina SPRAXIUM_NO_UPGRADE_NOTIFIER=1, ou a variável de ambiente com o mesmo nome, para desativar completamente essa verificação. Isso é útil em ambientes de CI, nos quais o aviso gera mais ruído do que sinal.