Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: ES6 modules syntax #22

Closed
wants to merge 3 commits into from

Conversation

diegodario88
Copy link
Contributor

Ao refatorar para ESM nativo tive alguns problemas de compatibilidade com as bibliotecas já existentes. Com isso, ao buscar soluções para utilizar a sintaxe de import e outras novidades da linguagem como:
Nullish coalescinga ?? b
Optional chaining: a?.b
Class fieldsclass C { x = 1; }. This includes static fields but not the #x private field syntax.
Export namespace syntax: export * as a from 'a';
Numeric separatorsconst n = 1_234;
Optional catch bindingtry { doThing(); } catch { }.

Encontrei bastante material sobre a lib Sucrase, uma alternativa ao Babel que promete ser 20x mais rápida. O acoplamento é simples e a integração com o nodemon funciona muito bem, sem nenhum delay aparente ao transformar CJS para ESM, tendo como possibilidade vários transforms inclusive TypeScript, se caso ele for adotado ao projeto o Sucrase facilitaria a transição.
Ava precisou de um complemento para enxergar os arquivos ESM, para isso foi adicionado a lib esm e a respectiva configuração ao package.json.
Adicinei uma exceção à regra no-unused-expressions apenas para podermos usar "ShortCircuit" e "Ternary" em outros casos essa regra continua apontando erro.
closes #19

@programadorabordo
Copy link
Contributor

Faaala Diego!!

Brother, esse PR ficou muito grande. Veio com várias mudanças distintas no mesmo PR. Tem que quebrar ele em alguns.

Exemplo: 1 PR para testes; 1 PR para os imports, 1PR para os refactors; etc.

Vi que você aplicou destructuring nos imports mas alguns ficam ruim de leitura, exemplo:
import { set } from '../repositories/cache.repository';

Esse set depois fica sem sentido no arquivo, pelo nome não tem como saber que é de cache. No caso tem que por um apelido ou deixar o import normal mesmo para depois usar ele como 'método' cacheRepository.set, .exists, etc.

Você abriu a issue do ES modules, sugeria fazer um PR só com os ES modules sem a refatoração para destructuring e tal. Se for o caso de refatorar para destructuring, mandar em outro PR.

Vamos quebrar esse PR em alguns pra analisar e ir aceitando aos poucos :)

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.

ES Modules
2 participants