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 i
na pasta de raiz da Vite -
Execute
pnpm run build
na pasta de raiz da Vite -
Se estiveres programando a própria Vite, podes ir para
packages/vite
e executarpnpm run dev
para 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
debugger
onde 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/xxx
e 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
debugger
aoplayground/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-serve
que 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 test
por 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-serve
executa os testes apenas sob o modo de serviço. -
pnpm run test-build
executa 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 asset
executará os testes para ambosplayground/asset
evite/src/node/__tests__/asset
sob 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-unit
executa 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
.git
e 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.