Olá! Estamos muito excitados que estejas interessado em contribuir com a Vite. Antes da submissão da tua contribuição, certifica-te de tirar um momento para ler através do seguinte guia. Nós também sugerimos-te ler a Filosofia do Projeto na nossa documentação.
O repositório da Vite é um mono-repositório utilizando os espaços de trabalho da pnpm. O gestor de pacote utilizado para instalar e ligar as dependências deve ser pnpm.
Para programar e testar o pacote vite principal:
-
Execute
pnpm ina pasta de raiz da Vite -
Execute
pnpm run buildna pasta de raiz da Vite -
Se estiveres programando a própria Vite, podes ir para
packages/vitee executarpnpm run devpara reconstruir a Vite automaticamente sempre mudares o seu código.
Tu podes alternativamente utilizar o Ambiente de Desenvolvimento de Docker da Vite.js por uma configuração de Docker em contentor para o desenvolvimento da Vite.js.
A Vite utiliza a pnpm v7. Se estiveres trabalhando sobre vários projetos com versões diferentes do pnpm, é recomendado ativar a Corepack executando
corepack enable.
Se quiseres utilizar ponto de quebra e explorar a execução do código, podes utilizar a funcionalidade "Executar e Depurar" do Visual Studio Code (ou VSCode).
-
Adiciona uma declaração
debuggeronde queres parar a execução do código. -
Clique sobre o ícone "Executar e Depurar" (ou "Run and Debug", em Inglês) na barra de atividade do editor.
-
Clique sobre o botão "Terminal de Depuração de JavaScript" (ou "JavaScript Debug Terminal").
-
Ele abrirá um terminal, depois vá para
playground/xxxe executepnpm run dev. -
A execução parará e utilizarás a Barra de Ferramenta de Depuração para continuares, passe por cima, reinicie o processo...
Depurando erros nos testes de Vitest utilizando a Playwright (Chromium) {#debugging-errors-in-vitest-tests-using-playwright-chromium}
Alguns erros são mascarados e escondidos por causa das camadas de abstração e da natureza de caixa de areia adicionada pela Vitest, Playwright, e Chromium. Para ver o que realmente existe de errado e os conteúdos da consola das ferramentas do programador naquelas instâncias, siga esta configuração:
-
Adicionar uma declaração
debuggeraoplayground/vitestSetup.ts-> gatilhoafterAll. Isto pausará a execução antes dos testes pararem e a instância de navegador da Playwright sair. -
Executar os testes com o comando de programa (ou script em Inglês)
debug-serveque ativará a depuração remota:pnpm run debug-serve resolve. -
Esperar pela ferramenta de programação inspetor abrir o teu navegador e o depurador para atribuir.
-
No painel de recursos na coluna da direita, clique o botão tocar (play, em Inglês) para resumir a execução e permitir os testes executarem o que abrirá uma instância de Chromium.
-
Focar-se na instância de Chromium, podes abrir as ferramentas de programação do navegador e inspecionar a consola lá para encontrar os problemas subjacentes.
-
Para fechar tudo, apenas pare o anterior processo de teste no teu terminal.
Tu podes desejar testar a tua cópia da Vite modificada localmente contra um outro pacote que é construído com a Vite. Para pnpm, depois da construção da Vite, podes usar pnpm.overrides. Por favor notar que pnpm.overrides deve ser especificada no package.json de raiz e deves primeiro listar o pacote como uma dependência no package.json de raiz:
{
"dependencies": {
"vite": "^2.0.0"
},
"pnpm": {
"overrides": {
"vite": "link:../path/to/vite/packages/vite"
}
}
}E ré-execute pnpm install para ligar o pacote.
Cada pacote sob playground/ contém um diretório __tests__. Os testes são executados usando Vitest + Playwright com as integrações personalizadas para escrita de testes simples. A configuração detalhada está dentro dos ficheiros vitest.config.e2e.js e playground/vitest*.
Antes da execução dos testes, certifica-te de que a Vite foi construída. No Windows, podes querer ativar o Modo de Programador para solucionar problemas com a criação de ligação simbólica para não administradores. Além disto podes querer definir core.symlinks de git para true para solucionar problemas com ligações simbólicas no git.
Cada teste de integração pode ser executado sob o modo de servidor de desenvolvimento ou modo de construção.
-
pnpm testpor padrão executa todos testes de integração em ambos modo de serviço e construção, e também os testes unitários. -
pnpm run test-serveexecuta os testes apenas sob o modo de serviço. -
pnpm run test-buildexecuta os testes apenas sob o modo de construção. -
Tu também podes usar
pnpm run test-serve [match]oupnpm run test-build [match]para executar os testes em uma pacote de teste especifico, por exemplopnpm run test-serve assetexecutará os testes para ambosplayground/assetevite/src/node/__tests__/assetsob o modo de serviço evite/src/node/__tests__/**/*apenas executará no modo de serviço.- Nota que a correspondência de pacote não está disponível para o programa
pnpm test, o qual sempre executa os testes.
- Nota que a correspondência de pacote não está disponível para o programa
Para além dos testes sob playground/ para testes de integração, os pacotes podem contém testes unitário sob os seus diretório playground/. Os testes unitários são alimentados pelo Vitest. A configuração detalhada está dentro dos ficheiros vitest.config.ts.
-
pnpm run test-unitexecuta testes unitários sob cada pacote. -
Tu também podes usar
pnpm run test-unit [match]para executar os testes relacionados.
Dentro dos testes de experimentos, podes importar o objeto page do ~utils, a qual é uma instância de Page da Playwright que já tem navegado para a página servida da atual zona de experimentos. Assim escrever um teste é tão simples quanto:
import { page } from '~utils'
test('should work', async () => {
expect(await page.textContent('.foo')).toMatch('foo')
})Alguns auxiliares de teste comum, por exemplo, testDir, isBuild ou editFile também estão disponíveis nos utilitários. O código-fonte está localizado no playground/test-utils.ts.
Nota: O ambiente de construção de teste usa um conjunto padrão de configuração de Vite diferente para ignorar a tradução de código durante os testes para torná-lo mais rápido. Isto pode produzir um resultado diferente comparado a construção de produção padrão.
Para adicionar novos testes, deves encontrar uma zona de testes relacionada a correção ou funcionalidade (ou criar uma nova). Como exemplo, o carregamento de recursos estáticos são testados na zona de testes dos recursos. Nesta aplicação de Vite, existe um teste para importações ?raw, com uma seção definida no index.html para ela:
<h2>?raw import</h2>
<code class="raw"></code>Isto será modificado com o resultado de uma importação de ficheiro:
import rawSvg from './nested/fragment.svg?raw'
text('.raw', rawSvg)Onde o utilitário text é definido como:
function text(el, text) {
document.querySelector(el).textContent = text
}Nos testes da especificação, as modificações para o DOM listado acima são usadas para testar esta funcionalidade:
test('?raw import', async () => {
expect(await page.textContent('.raw')).toMatch('SVG')
})Em muitos casos de teste precisamos simular dependências com o uso dos protocolos link: e file:. O pnpm trata o link como ligações simbólicas e file: como ligações que não são simbólicas. Para testar as dependências como se elas fossem copiadas para node_modules, use o protocolo file:, em outros casos deves usar o protocolo link:.
Tu podes definir a variável de ambiente DEBUG para ligar os relatórios da depuração. Por exemplo DEBUG="vite:resolve". Para ver todos os relatório da depuração podes definir DEBUG="vite:*", mas esteja avisado de que será muito ruidoso. Tu podes executar grep -r "createDebugger('vite:" packages/vite/src/ para ver uma lista de possibilidades de depuração disponíveis.
-
Confirme um ramo do tópico a partir de um ramo da base, por exemplo
main, e combine de volta contra aquele ramo. -
Se estiveres a adicionar uma nova funcionalidade:
- Adicione o caso de teste em acompanhamento.
- Forneça uma razão convincente para adicionar esta funcionalidade. Idealmente, deves abrir um tema de sugestão primeiro e tê-lo aprovado antes de trabalhar sobre ele.
-
Se estiveres a corrigir um problema:
- Se estiveres a resolver um problema especial, adicione
(fix #xxxx[,#xxxx])(#xxxx é o identificador do problema) no título do teu pedido de atualização de repositório para um melhor relatório de lançamento, por exemplofix: update entities encoding/decoding (fix #3899). - Forneça uma descrição detalhada do problema no pedido de atualização de repositório (PR, sigla em Inglês). Demonstração ao vivo de preferência.
- Adicione cobertura de teste apropriada se aplicável.
- Se estiveres a resolver um problema especial, adicione
-
Está bem ter várias pequenas consolidações (commits, em Inglês) na medida que trabalhas sobre o pedido de atualização de repositório - a GitHub pode espremê-las automaticamente antes da combinação.
-
Certifica-te de que os testes passam!
-
As mensagens de consolidação devem seguir a convenção de mensagem de consolidação para que os relatórios de mudança pode ser automaticamente geradas. As mensagens de consolidação são automaticamente validadas antes de consolidar (com a invocação de Gatilhos de Git através do yorkie).
-
Não precisas preocupar-te a respeito do estilo de código enquanto tens instalado as dependências de desenvolvimento - os ficheiros modificados são automaticamente formatados com o Prettier durante a consolidação (pela invocação de Gatilhos de Git através do yorkie).
A seção seguinte é na sua maioria para os preservadores que tem acesso de consolidação, mas a sua leitura é útil para o caso de quereres fazer contribuições não triviais para a base de código.
A Vite tem por objetivo ser leve, e isto inclue estar ciente do número de dependências de npm e do tamanho delas.
Nós usamos a rollup para pré-empacotar a maior parte das dependências antes da publicação! Portanto a maior parte das dependências, até as usadas no código da src, devem ser adicionadas sob a devDependencies por padrão. Isto também cria um número de restrições que precisamos estar cientes deles na base de código:
Em alguns casos nós intencionalmente importamos de maneira preguiçosa algumas dependências para melhorar o desempenho da inicialização. No entanto, nota que não podemos simplesmente usar as chamadas require('somedep') já que estes são ignorados nos ficheiros de Módulo de ECMAScript então a dependência não serão incluídas no pacote, e a dependência de fato nem estará quando for publicada já que estão nas devDependencies.
No lugar desta, use (await import('somedep')).default.
A maioria das dependências devem ser adicionadas ao devDependencies mesmo se forem necessárias no momento da execução. Algumas exceções são:
- Pacotes de tipos. Por exemplo:
@types/*. - As dependências que não podem ser empacotadas apropriadamente por causa dos ficheiros binários. Por exemplo:
esbuild. - As dependências que entregam os seus próprios tipos e os seu tipo é usado nos tipos públicos da própria vite. Por exemplo:
rollup.
Evite dependências que têm amplas dependências transitivas que resultam em tamanho inchado comparado a funcionalidade que ela fornece. Por exemplo, o próprio http-proxy mais o @types/http-proxy está um pouco acima de 1MB em tamanho, mas http-proxy-middleware chega a uma tonelada de dependências que faz dela 7MB(!) quando um intermediário personalizado minimalista em cima do http-proxy apenas exige que umas poucas linhas de código.
A Vite tem por objetivo ser completamente usável como dependência em um projeto de TypeScript (por exemplo, ela deve fornecer as tipagens apropriadas para VitePress), e também no vite.config.ts. Isto significa que tecnicamente uma dependência cujos tipos que são expostos precisam fazer parte das dependencies ao invés das devDependencies. No entanto, isto quem dizer que não seremos capazes de empacota-lá.
Para dar a volta a isto, embutiremos alguns tipos destas dependências no packages/vite/src/dep-types. Desta maneira podemos continuar a expor a tipagem exceto empacotar o código-fonte da dependência.
Use pnpm run check-dist-types para verificar se os tipos empacotados não dependem de tipos nas devDependencies. Se estiveres a adicionar as dependencies, certifica-te de configurar tsconfig.check.json.
Nós já temos muitas opções de configuração, e devemos evitar a correção de um problema com a adição de mais uma outra opção. Antes de adicionar uma opção, tente pensar a respeito de:
- Se o problema é realmente digno de tratamento
- Se o problema pode ser corrigido com um padrão mais inteligente
- Se o problema tem solução com uso das opções existentes
- Se o problema pode ser tratado com uma extensão
Se gostarias de começar uma tradução no teu idioma, és convidado a contribuir! Faça a gentileza de juntar-te ao canal #translations na Vite Land para discutir e coordenar com os outros.
A documentação em Inglês está fixada no repositório principal da Vite, para permitir os colaboradores trabalharem sobre a documentação, testes e implementação na mesma PR. As traduções são feitas copiando o repositório principal.
-
Para receberes todos os ficheiros da documentação, precisas primeiro clonar este repositório na tua conta pessoal.
-
Manter todos os ficheiros no
docs/e eliminar todo o resto.-
Tu deves configurar a tua página de tradução baseada em todos os ficheiros na pasta
docs/como um projeto de VitePress. (isto dito, ppackage.jsoné necessário). -
Atualizar o histórico da git com a eliminação da pasta
.gite entãogit init
-
-
Traduza a documentação.
- Durante este estágio, podes estar a traduzir os documentos e sincronizar as atualizações ao mesmo tempo, mas não se preocupe com isto, é muito comum na contribuição com a tradução.
-
Envie as tuas consolidações para o teu repositório da GitHub. Tu podes configurar também uma pré-visualização da Netlify.
-
Use a ferramenta Ryu-cho para configurar uma Ação de GitHub, rastreie automaticamente a atualização da documentação em Inglês depois.
Nós recomendamos conversar com os outros na Vite Land assim encontras mais colaboradores para o teu idioma para partilhar o trabalho de manutenção. Uma vez feita a tradução, comunique-a para equipa da Vite assim o repositório será movido para organização vitejs oficial na GitHub.