ECMAScript Modules são para reutilizar código em outros arquivos usando a sintaxe de import e export.
Exemplo:
//Arquivo foo.js que exporta uma função
export function foo() {
//code
}
//Arquivo que quer utilizar aquela função
import { foo } from './foo.js';
foo();
Quando colocamos a tag script no html e queremos usar ESM, temos que transformar o script em um módulo, adicionando type="module".
<script src="script.js" type="module"></script>
Mas no Node, não temos uma tag script para ir lá e mudar o tipo para module.
Na versão 14 do Node foi implementado uma forma de fazer isso, mas nas versões anteriores conseguimos fazer isso usando bibliotecas externas.
Aqui mostrarei como utilizar ESM no Node v14 e nas versões anteriores também.
Nesta versão, você só precisará acrescentar uma linha no package.json e já pode usar os Módulos ES 😃.
"type": "module",
Uma das formas de conseguir usar os Módulos ES é usar a biblioteca esm, você pode instalar com o seguinte comando:
npm install esm
Agora você já pode utilizar e quando for executar o servidor, precisa acrescentar o -r esm no script.
exemplo:
node -r esm server.js
Criando um app Node
npm init
Instalando express
npm install express
Criarei o server.js com o seguinte código:
import express from 'express';
const app = express();
app.listen(3000, () => {
console.log('Listening on port: 3000');
});
app.get('', (req, res) => {
res.send('Hello ESM');
});
Vou colocar o server.js como arquivo principal no package.json e também acrescentar a linha type, para dizer que estou usando módulos ES:
"main": "server.js",
"type": "module",
Rodar o app:
npm start
Acessar http://localhost:3000 para ver se deu certo.