Qual a diferença entre require e import no Node.js?
O Node.js oferece duas formas principais de importar módulos: require
, que pertence ao sistema CommonJS, e import
, que faz parte dos ES Modules. Mas qual a diferença entre eles e qual usar no seu projeto?
O que é require?
O require
é o método tradicional de importar módulos no Node.js e segue o padrão CommonJS. Ele é executado de forma síncrona e pode ser usado em qualquer arquivo JavaScript do Node.js.
Exemplo de uso do require:
const fs = require('fs');
const calculadora = require('./calculadora');
console.log(calculadora.somar(2, 3));
Esse código importa o módulo interno fs
e um módulo personalizado calculadora.js
.
O que é import?
O import
faz parte do padrão ES Modules, que segue a sintaxe moderna do JavaScript. Ele funciona de forma assíncrona e requer que o arquivo tenha a extensão .mjs
ou que o package.json
contenha a configuração "type": "module"
.
Exemplo de uso do import:
import fs from 'fs';
import { somar } from './calculadora.js';
console.log(somar(2, 3));
Nesse caso, a sintaxe import
é usada para importar um módulo.
Principais diferenças entre require e import
Característica | require (CommonJS) | import (ES Modules) |
---|---|---|
Tipo de carregamento | Síncrono | Assíncrono |
Disponível por padrão? | Sim | Apenas se "type": "module" for definido no package.json |
Suporte em navegadores | Não | Sim |
Suporte no Node.js | Sim (padrão) | Sim (versões recentes) |
Quando usar require ou import?
- Use require se estiver trabalhando com código legado ou pacotes npm que ainda utilizam CommonJS.
- Use import se estiver criando um projeto moderno e deseja compatibilidade com padrões ES6.
Como habilitar ES Modules no Node.js?
Se você deseja usar import
, adicione "type": "module"
no package.json
:
{
"type": "module"
}
Ou renomeie seus arquivos para .mjs
.
Conclusão
O require
e o import
cumprem a mesma função, mas pertencem a padrões diferentes. Enquanto require
continua sendo amplamente usado no Node.js, import
se tornou o padrão recomendado para projetos modernos. A escolha entre os dois depende do contexto do projeto.
Como a transição para ES Modules está impactando o Node.js?
O JavaScript passou por muitas mudanças ao longo dos anos, e o suporte a módulos é um dos maiores avanços. No início, o Node.js adotou o padrão CommonJS (require
), permitindo a modularização do código. No entanto, com a evolução do JavaScript, a comunidade padronizou os ES Modules (import
).
Hoje, a maioria dos frameworks modernos, como React, Next.js e NestJS, já utilizam ES Modules por padrão. No entanto, muitos pacotes npm ainda são escritos em CommonJS, exigindo compatibilidade com require
. Com o tempo, a transição completa para ES Modules será inevitável.
Algumas aplicações:
- Importação de bibliotecas e módulos externos
- Organização e modularização do código
- Compatibilidade com padrões modernos de JavaScript
- Criação de APIs e aplicações escaláveis
- Facilidade de manutenção em projetos de grande porte
Dicas para quem está começando
- Se estiver começando, prefira
import/export
para novos projetos. - Se precisar usar
import
, adicione"type": "module"
nopackage.json
. - Evite misturar
require
eimport
no mesmo projeto. - Use
require
se estiver lidando com pacotes npm legados. - Testar a compatibilidade do seu código antes de migrar completamente para ES Modules.
Contribuições de Henrique Almeida