ECMAScript Modules no NodeJS

Henrique Silvério
IM+: finanças e investimentos
2 min readAug 26, 2019

--

ECMAScript modules, também conhecido como “ES modules” ou apenas “ESM”, é uma feature muito esperada há anos, que adiciona suporte para uso de módulos no JavaScript de forma nativa, padronizada.

E com a chegada do NodeJS 12, tivemos uma nova implementação da flag --experimental-modules, e a expectativa é que esta seja entregue para substituir o padrão CommonJS, na versão LTS, prevista para ser lançada em Outubro desse ano.

Está na hora de brincarmos um pouco com essas novidades e preparar nosso código para essa atualização!

Usando ES Modules no NodeJS

Ao usar a flag --experimental-modules, por padrão, o NodeJS reconhecerá a nova sintaxe somente nos arquivos com extensão .mjs.

E se preferir, podemos continuar usando a extensão .js. Para isso basta adicionar um "type": "module" no package.json do projeto.

Regras básicas

Para importar módulos, devemos passar o nome do arquivo completo, com a extensão.

Por exemplo: import Fliper from './fliper.js'.

Mas, se quiser, podemos também usar o comportamento estilo CommonJS, que resolve a extensão de forma automática.

Para isso, é necessário passar uma nova flag: —-es-module-specifier-resolution=node.

Com essa flag, o import fica assim: import Fliper from './fliper'.

Importando módulos do npm e bibliotecas do core

O loader de ES modules do NodeJS suporta módulos escritos em CommonJS também.

Por isso, podemos continuar usando normalmente os módulos baixados do npm, que estejam nesse formato.

Por exemplo, para importar o framework Express: import express from 'express'.

Além disso, todas as bibliotecas core como fs e path, já suportam o padrão ESM.

Conclusão

Com a chegada do ES Modules por padrão no NodeJS, não será mais necessário utilizar flags e transpiladores para termos suporte completo a código ES6. E ao menos que o código use bibliotecas core do NodeJS, poderemos — de verdade — escrever um único JavaScript que rode em qualquer ambiente, tanto no cliente como no servidor. JavaScript isomórfico!

Referências

- Announcing a new --experimental-modules
- The new ECMAScript module support in Node.js 12
- What’s New in Node.js 12: ESM Imports

--

--

Henrique Silvério
IM+: finanças e investimentos

💻 Software Developer 🌱 Vegan for the animals 🎮 Support at Summoner’s Rift