Open diegodario88 opened 4 years ago
Perfeito, Diego!
Já era minha vontade de migrar sim para o padrão do ES6. Todas as vantagens que citou são o suficientes, assim como o CJS está ficando depreciada.
Além disso, já temos mais um passo caso a gente rode essa aplicação no Deno, no futuro.
Agora precisamos ver se todas as dependências que usamos, dá suporte ao ESM. Se ainda não, o único jeito vai ser usando um transpiler, como o Babel.
A forma como importamos um código atualmente no projeto utiliza CommonJS/RequireJS, o que é algo legal pois é possível fazer algumas 'OneLiners' para importar e executar um código, como
require('dotenv-safe').config();
e também omitir a extensão do arquivo.Porém existe a possibilidade de usar o padrão ESM o qual já estamos acostumados a fazer na web. Estou estudando o assunto ainda mas consigo enxergar algumas vantagens em relação ao atual modo, conforme Gil Tayar demonstrou em sua palestra _https://www.youtube.com/watch?v=kK_3OP0uJ0Y_
Strict Por padrão o modo estrito é habilitado e impede que variáveis sejam declaradas no escopo global.
Browser Compatible Será possível, em um futuro próximo, reutilizar um módulo da API no projeto Web utilizando
<script type="module" src="./esm-module.mjs"></script>
Statically parsed As importações com ESM são carregadas primeiro e não executadas diretamente como no CJS. Load+Parse+Bind antes de executar o código que importamos ajuda a entender possíveis erros comuns.
SyntaxError: The requested module './greet.mjs' does not provide an export named 'greet'
CJS executaria o código e apresentariaTypeError: greet is not a function
.Async Com o fluxo do processo acima conseguimos fazer importação assíncrona, o que impede de a importação travar a fila de execução. Ou seja é possível executar todos awaits paralelos a importação. Também é possível usar Top-level await, quando essa funcionalidade estiver disponível, isso evitaria a necessidade de escrever uma função async para usar await como nesse caso:
Com as vantagens e algumas desvantagens descritas acima e tendo em vista a possibilidade da base de código desse projeto crescer, gostaria de propor a discussão sobre uma refatoração gradual para ESM nesse estágio inicial. Vale salientar que isso por si só já seria bastante mudança e envolveria refletir sobre as ferramentas e bibliotecas já existentes mas evitaria uma major refac posteriormente.