|
| 1 | +# Contexto do Projeto: Correção da Issue #520 no Repositório `nuxt/typescript` |
| 2 | + |
| 3 | +Este documento resume o trabalho realizado para resolver a [issue #520](https://github.com/nuxt/typescript/issues/520), que reportava uma falha na resolução de aliases de caminho (como `~` ou `@`) em `import()` dinâmicos que utilizam *template literals*. |
| 4 | + |
| 5 | +## Objetivo |
| 6 | + |
| 7 | +O objetivo era corrigir o bug que impedia o Webpack de resolver corretamente caminhos como `` `~/components/${meuComponente}.vue` `` durante o processo de build do Nuxt. |
| 8 | + |
| 9 | +## Processo de Desenvolvimento |
| 10 | + |
| 11 | +1. **Análise:** A issue foi analisada e o repositório `nuxt/typescript` foi clonado. A investigação do código-fonte, especificamente do pacote `packages/typescript-build`, revelou que o Webpack não estava configurado para lidar com a resolução de aliases dentro de expressões de *template literal*. |
| 12 | + |
| 13 | +2. **Implementação da Solução:** |
| 14 | + * O arquivo `packages/typescript-build/src/index.ts` foi modificado. |
| 15 | + * A solução implementada utiliza o `NormalModuleReplacementPlugin` do Webpack. Este plugin intercepta as requisições de módulos que correspondem a um alias do Nuxt e substitui o alias pelo caminho absoluto correspondente antes que o Webpack tente resolver o alias. |
| 16 | + * Isso garante que os `imports` dinâmicos com *template literals* funcionem como esperado. |
| 17 | + |
| 18 | +3. **Tentativa de Verificação (CI):** |
| 19 | + * Foi feita uma tentativa de executar os testes de CI locais (`yarn test`) para validar a alteração. |
| 20 | + * A instalação das dependências (`npm install` ou `yarn install`) falhou devido a problemas específicos do ambiente de desenvolvimento (Termux no Android). |
| 21 | + * Os erros estavam relacionados à compilação de dependências nativas (`@parcel/watcher`), que exigem o Android NDK, cuja configuração não estava disponível. |
| 22 | + * Após a correção do código, o `yarn test` falhou novamente com `eslint: not found`, indicando que as dependências não estavam instaladas. A tentativa de `yarn install` confirmou que a compilação do `@parcel/watcher` ainda é um impedimento devido à ausência do Android NDK. |
| 23 | + * Tentativas subsequentes de `yarn test` revelaram erros de linting (`defineComponent not found in 'vue'`) e incompatibilidade de versões do Vue (`Vue packages version mismatch`). Foram feitas tentativas de corrigir esses problemas localmente através de ajustes no `.eslintrc.js` e `package.json`, mas a execução local dos testes continua sendo impedida pelo problema persistente do Android NDK. |
| 24 | + |
| 25 | +## Conclusão |
| 26 | + |
| 27 | +A alteração no código é robusta e baseada em mecanismos padrão do Webpack para resolver este tipo de problema. Embora os testes não tenham podido ser executados localmente devido a limitações de ambiente (especificamente a necessidade do Android NDK para compilar dependências), a solução é considerada pronta para ser validada pelo sistema de Integração Contínua (CI) do próprio repositório no GitHub, que opera em um ambiente padronizado. |
| 28 | + |
| 29 | +O próximo passo é submeter um Pull Request com as alterações para que a equipe do Nuxt possa revisar e integrar a correção. |
| 30 | + |
| 31 | +--- |
| 32 | + |
| 33 | +## Atualização do Processo de Desenvolvimento (02/07/2025) - CI Test Failures |
| 34 | + |
| 35 | +Os testes de CI para a Pull Request #645 falharam devido a múltiplos erros, principalmente relacionados à resolução de módulos e à cobertura de testes. |
| 36 | + |
| 37 | +### 1. Erros de Módulo Não Encontrado (`@babel/runtime/helpers`) |
| 38 | + |
| 39 | +Os logs do CI indicam falhas na resolução de módulos do `@babel/runtime/helpers`, como `defineProperty`, `slicedToArray`, `asyncToGenerator`, `classCallCheck`, `createClass`, `typeof`, e `toArray`. Os caminhos de erro (`.nuxt/utils.js`, `.nuxt/router.js`, `.nuxt/index.js`, `.nuxt/components`, `.nuxt/client.js`, `.nuxt/App.js`, `.nuxt/mixins/fetch.client.js`, `node_modules/ufo`) sugerem que o Webpack não está conseguindo localizar corretamente esses *helpers*. |
| 40 | + |
| 41 | +A solução proposta anteriormente de adicionar `config.resolve!.alias` para `@babel/runtime/helpers` em `packages/typescript-build/src/index.ts` foi implementada. No entanto, a persistência desses erros no CI sugere que a resolução do `path.resolve(this.options.rootDir!, 'node_modules/@babel/runtime/helpers')` pode estar incorreta no ambiente de CI. É possível que `this.options.rootDir` esteja apontando para um diretório aninhado (`/home/runner/work/typescript/typescript/`) em vez da raiz do repositório (`/home/runner/work/typescript/`), fazendo com que o `node_modules` seja procurado no local errado. |
| 42 | + |
| 43 | +### 2. Falhas na Cobertura de Testes (Jest) |
| 44 | + |
| 45 | +A cobertura global de testes não atingiu os limites esperados: |
| 46 | +* **Statements:** 97.61% (esperado: 100%) |
| 47 | +* **Branches:** 91.66% (esperado: 100%) |
| 48 | +* **Lines:** 97.36% (esperado: 100%) |
| 49 | +* **Functions:** 90% (esperado: 100%) |
| 50 | + |
| 51 | +### 3. Falhas nos Testes Unitários |
| 52 | + |
| 53 | +Os resultados do Jest indicaram: |
| 54 | +* **Test Suites:** 1 falhou, 1 passou (2 no total). |
| 55 | +* **Tests:** 5 falharam, 5 passaram (10 no total). |
| 56 | + |
| 57 | +### 4. Saída de Erro do Workflow |
| 58 | + |
| 59 | +O workflow falhou com a mensagem: `error Command failed with exit code 1.` |
| 60 | + |
| 61 | +### Próximos Passos |
| 62 | + |
| 63 | +A prioridade é investigar e corrigir a falha na resolução dos módulos `@babel/runtime/helpers`. Isso pode envolver ajustar o `path.resolve` no `index.ts` para garantir que ele aponte corretamente para o `node_modules` do projeto na raiz do repositório no ambiente de CI. As falhas de cobertura e testes unitários serão abordadas após a resolução dos problemas de dependência. |
| 64 | + |
| 65 | +## Atualização do Processo de Desenvolvimento (02/07/2025) - Tentativas de Sincronização e Resolução de Conflitos |
| 66 | + |
| 67 | +Após a análise das falhas do CI, foi identificada a necessidade de sincronizar a branch local com o fork remoto e resolver um conflito de merge. As seguintes ações foram tomadas: |
| 68 | + |
| 69 | +1. **Descarte de Alterações Não Essenciais:** Alterações em `.eslintrc.js`, `package.json`, `yarn.lock` e `package-lock.json` (que não eram diretamente relacionadas à correção do bug principal) foram descartadas para garantir que o commit final contivesse apenas a correção essencial. |
| 70 | + |
| 71 | +2. **Tentativa de `git pull --rebase`:** Foi tentado um `git pull --rebase my-fork fix-dynamic-import-alias` para integrar as mudanças do fork remoto e aplicar o commit local em cima delas. No entanto, esta operação resultou em um conflito de merge. |
| 72 | + |
| 73 | +3. **Resolução de Conflito em `packages/typescript-build/src/index.ts`:** O conflito ocorreu na linha que define a expressão regular para o `test` das regras de módulos `.ts` e `.tsx`. A versão correta da expressão regular (`test: new RegExp(`\.${ext}$`),`) foi mantida, e o código duplicado e os marcadores de conflito foram removidos. Esta correção foi aplicada diretamente no arquivo. |
| 74 | + |
| 75 | +4. **Continuação do Rebase:** Após a resolução manual do conflito, o `git add packages/typescript-build/src/index.ts` foi executado para marcar o conflito como resolvido. Em seguida, `git rebase --continue` foi utilizado para finalizar o rebase. Foi necessário definir a variável de ambiente `GIT_EDITOR=true` para evitar que o Git abrisse um editor interativo durante o processo de rebase. |
| 76 | + |
| 77 | +### Estado Atual |
| 78 | + |
| 79 | +A branch local `fix-dynamic-import-alias` está agora sincronizada com o fork remoto, e o commit contendo a correção da expressão regular em `packages/typescript-build/src/index.ts` foi aplicado com sucesso. O próximo passo é o `git push` para o fork remoto, o que acionará uma nova execução dos testes de CI. |
| 80 | + |
| 81 | +--- |
| 82 | + |
| 83 | +## Fluxo de Pull Request (PR) |
| 84 | + |
| 85 | +Para submeter suas alterações como uma Pull Request para o repositório principal do Nuxt, siga estes passos: |
| 86 | + |
| 87 | +1. **Faça o Push para o seu Fork:** |
| 88 | + * Certifique-se de que suas alterações estão commitadas localmente. |
| 89 | + * Envie suas alterações para o seu *próprio fork* no GitHub. Use o comando: |
| 90 | + ```bash |
| 91 | + git push --set-upstream my-fork fix-dynamic-import-alias |
| 92 | + ``` |
| 93 | + (Substitua `my-fork` pelo nome do seu remote que aponta para o seu fork, se for diferente). |
| 94 | + * Você pode verificar seus remotes com `git remote -v`. |
| 95 | + |
| 96 | +2. **Crie a Pull Request no GitHub:** |
| 97 | + * Após o push, visite a página do seu fork no GitHub (`https://github.com/MaxwellAt/typescript`). |
| 98 | + * Você verá um banner ou um botão indicando que sua branch `fix-dynamic-import-alias` tem commits recentes e pode ser comparada e ter uma Pull Request aberta. |
| 99 | + * Clique no botão para criar a Pull Request. |
| 100 | + * Certifique-se de que a base da PR seja a branch `main` (ou a branch de desenvolvimento apropriada) do repositório `nuxt/typescript` e que a sua branch seja a `fix-dynamic-import-alias` do seu fork. |
| 101 | + |
| 102 | +3. **Preencha os Detalhes da PR:** |
| 103 | + * Forneça um título claro e conciso para a PR. |
| 104 | + * Escreva uma descrição detalhada das suas alterações, explicando o problema que você está resolvendo (referenciando a issue #520) e como sua solução funciona. |
| 105 | + * Se houver testes de CI que falharam anteriormente, mencione que você espera que esta correção os resolva. |
| 106 | + |
| 107 | +4. **Aguarde a Revisão:** |
| 108 | + * A equipe do Nuxt revisará sua PR. Eles podem pedir alterações ou esclarecimentos. |
| 109 | + * Monitore os resultados do CI na sua PR. Se houver falhas, você precisará investigar e corrigir. |
0 commit comments