Skip to content

substituir pipeline babel por tsx + esbuild (#91)#421

Open
JosueModesto wants to merge 4 commits into
developmentfrom
91-substituir-pipeline-babel-por-tsx-esbuild
Open

substituir pipeline babel por tsx + esbuild (#91)#421
JosueModesto wants to merge 4 commits into
developmentfrom
91-substituir-pipeline-babel-por-tsx-esbuild

Conversation

@JosueModesto
Copy link
Copy Markdown
Contributor

O que foi feito

Substituição completa da pipeline Babel por tsx + esbuild, conforme issue #91.

Removido

  • @babel/cli, @babel/core, @babel/node, @babel/plugin-proposal-class-properties, @babel/preset-env, @babel/preset-react, @babel/preset-typescript
  • babel-plugin-module-resolver, jiti, nodemon
  • Arquivo .babelrc

Adicionado / Atualizado

  • esbuild adicionado em devDependencies
  • tsx movido de dependencies para devDependencies
  • Criado build.mjs: executa limpeza da pasta dist via rmSync e gera bundle com esbuild (elimina necessidade de rimraf e script clean)
  • Script start atualizado para tsx --watch --env-file=.env src/index.js
  • Script build:app atualizado para node build.mjs
  • eslint.config.mts renomeado para eslint.config.mjs (remove dependência de jiti no ESLint 9)

Validação

  • yarn build
  • yarn lint
  • yarn test 27/27

Comment thread src/controllers/tombos-controller.js Outdated
],
raw: true,
})
.then(resultado => {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fazer o uso de async/await ao invés de .then.

Comment thread src/controllers/tombos-controller.js Outdated

export const getProximoNumeroTomboEndPoint = (request, response, next) => {
getProximoNumeroTombo()
.then(proximoNumero => {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fazer o uso de async/await com try/catch ao invés de then/catch

Comment thread src/controllers/tombos-controller.js Outdated
const callback = transaction =>
Promise.resolve()
.then(() => {
if (isNovoTombo) {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esta lógica aqui não deveria existir, você deve aceitar o valor que o frontend está enviando, e não gerar outro aqui. O cálculo do próximo número acontece na outra rota e é devolvido para o frontend, o valor que é recebido na requisição deve ser usado para inserir o tombo.


private async importMigrationModule(name: string): Promise<{ run: (knex: Knex) => Promise<void> }> {
const filePathWithoutExtension = path.join(this.migrationsPath, name)
const isAbsolute = path.isAbsolute(this.migrationsPath)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Qual problema existia aqui? Por que foi necessário esta alteração?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Por algum motivo que eu não sei explicar, ele estava reclamando que não conseguia encontrar o caminho para fazer as migrações devido a windows ser \ e não /, dai para rodar na minha máquina eu alterei.

Comment thread src/routes/tombos.js Outdated
getUltimoNumeroTombo,
]);

app.route('/tombos/proximo_numero')
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esta rota precisa de autenticação.

Comment thread tsconfig.json
Comment thread package.json Outdated
"nodemon": "3.1.10",
"npm-run-all": "4.1.5",
"rimraf": "6.1.2",
"tsx": "^4.21.0",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Por favor, usar a versão exata, sem o ^

Comment thread package.json Outdated
"babel-plugin-module-resolver": "5.0.2",
"chai": "6.2.0",
"chai-http": "^5.1.2",
"esbuild": "^0.28.0",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Usar a versão exata, sem o ^

Comment thread package.json Outdated
"build": "run-s clean build:app",
"build:app": "node build.mjs",
"start": "tsx --watch --env-file=.env src/index.js",
"build": "run-s build:app",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Uma vez que o script build só executa uma coisa, que nesse caso é executar build:app, você não precisa mais do build:app, você pode trazer o node build.mjs aqui para o script build

Comment thread build.mjs Outdated
// Prefere entrada CJS dos pacotes para evitar problemas de interop de default export
mainFields: ['main', 'module'],
// Dialetos opcionais do knex/sequelize não instalados no projeto
external: [
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ao invés de colocar dependencias como externas, você pode simplesmente colocar a configuração bundle como false, e o esbuild vai se comportar semelhante ao babel, fazendo a compilação dos arquivos somente, sem a necessidade de configurar as bibliotecas externas.

…versões exata para o tsx e esbuild, funções de proximo numero usando async/await
Comment thread src/controllers/tombos-controller.js Outdated
return null;
}

const getProximoNumeroTombo = async () => {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O código de número do tombo já foi para o branch development, não deveria estar neste pull request.

Comment thread build.mjs
// Limpa a pasta dist antes de gerar novo build
rmSync('dist', { recursive: true, force: true })

await build({
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JosueModesto eu baixei seu branch local e encontrei alguns problemas:

  • Quando mudamos para bundle: false, o único arquivo transpilado foi o .index.js, o restente não. Acredito que o que você precisa fazer é passar o valor de entryPoints usando glob.
  • Você precisa lembrar que temos arquivos de vários tipos, por exemplo, .js e .ts, .ejs, .tsx e vários outros juntos, então precisamos transpilar todos eles, não somente arquivos .js.

Copy link
Copy Markdown
Contributor Author

@JosueModesto JosueModesto May 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@edvaldoszy Eu fiz as mudanças subi o código porem ele esta dando erro e eu tentei consertar de várias formas mas não consegui, não sei o que faço, eu adicionei o valor do entryPoints com o glob pra .js,.ts e .tsx, com o .ejs o yarn build quebra, pelo o que o chat falou é o pq o esbuild é compilador de Java/TypeScript então ele não entende a sintaxe do .ejs, só que quando eu executo o docker compose up --build, ele não esta resolvendo as extensões, por estar com o bundle:false e esm, ele não resolve as extensões dos imports, e dai o build vai procurar os arquivos, ele procura por exemplo app e não app.js não encontra e quebra. E dai eu não sei o que fazer, já tentei fazer um plugin para ele adicionar as extensões mas não funcionou e eu realmente não sei o que fazer. Para ficar claro o docker compose up --build, ele builda tudo, quando vai subir o docker ele da este erro: Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/hcf_api/app/dist/app' imported from /home/hcf_api/app/dist/index.js

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants