Qual a diferença entre require e import no Node.js?

Require e import são formas de importar módulos no Node.js. Require é usado no CommonJS, enquanto import pertence ao ES Modules.

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.

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" no package.json.
  • Evite misturar require e import 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

Compartilhe este tutorial: Qual a diferença entre require e import no Node.js?

Compartilhe este tutorial

Continue aprendendo:

Como importar e exportar módulos no Node.js?

No Node.js, os módulos podem ser importados e exportados usando CommonJS (`require/module.exports`) ou ES Modules (`import/export`).

Tutorial anterior

Como criar um módulo personalizado no Node.js?

Criar módulos personalizados no Node.js permite encapsular funcionalidades reutilizáveis e organizar melhor o código do projeto.

Próximo tutorial