Diferenças entre import e require JavaScript

Neste artigo você vai aprender as diferenças entre import e require em JavaScript, recursos que temos para importar funcionalidades de JS

diferencas de import e require javascript capa

Fala programador(a), beleza? Bora aprender mais sobre importação e exportação de funcionalidades com JavaScript!

O require é uma forma que foi desenvolvida para Node.js de importar e exportar módulos em uma aplicação

Já o import é um recurso mais novo, que foi desenvolvido na versão ES6 do JavaScript

Sendo assim, o import acaba sendo mais moderno que o require e possui mais funcionalidades

O require aceita apenas exportações por meio do module.exports, que pode conter qualquer tipo de dado, como: objetos, funções, strings

Já o import aceita tanto o module.exports como o export, para receber o código de outros arquivos

Veja alguns exemplos de exportação:

// Modo mais antigo
module.exports = {
 teste: "Testando export"
}

// Modo mais recente
export function teste() {
 console.log("Testando export);
}

E agora as formas de importar com import e require:

// Utilizando require
const teste = require("./teste.js");

// Utilizando import
import * as teste from "./teste.js"
Formação Claude Code
Formação Recomendada

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 116 aulas
  • 4 projetos
  • 9h 23min

Lembre-se da compatibilidade: recursos do ES6 não estão totalmente compatíveis com os navegadores

Então você precisa de um transpile para transformar o código ES6 em uma versão mais padronizada

Um transpiler bem conhecido é o Babel

Conclusão

Neste artigo vimos quais são as diferenças entre import e require

O import é uma forma mais recente de importar módulos e te dá mais possibilidades de utilização, como vimos no artigo

Já o require é a forma mais antiga de importar módulos, amplamente utilizada em Node.js até nos dias de hoje

Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube

CommonJS e ES Modules: os nomes por trás disso tudo

Antes de ir pro código, um detalhe que destrava sua vida

Quando você lê require, o nome do sistema de módulos por trás dele é CommonJS

Quando você lê import, o sistema é o ES Modules, ou ESM, como o pessoal escreve por aí

E por que isso importa? Porque quase toda discussão, erro de terminal e resposta de fórum sobre esse assunto usa esses dois nomes, e não "require" e "import"

Então guarda essa dupla de nomes, ela é a chave pra você procurar a solução certa quando travar 🙂

Carregamento: a diferença que quase ninguém comenta

Até aqui parece só sintaxe diferente, mas o comportamento também muda

O require é resolvido na hora em que aquela linha roda

Ele é uma chamada de função como qualquer outra, e por isso você consegue jogar ele dentro de um if, por exemplo

Já o import é declarativo: ele é lido antes do código rodar, o que deixa as ferramentas enxergarem exatamente o que entra e o que sai de cada arquivo

E por que isso é bom? Porque abre espaço pra otimização, tipo o tree shaking, que descarta o que você importou e nunca usou

Sacou por que o import não é só o require mais bonitinho? 😀

Dá pra misturar import e require no mesmo arquivo?

Aqui mora a maior dor de cabeça de quem está começando

São dois sistemas de módulos diferentes, com regras diferentes de carregamento, então misturar os dois no mesmo arquivo costuma terminar em erro

O caminho tranquilo é padronizar: o arquivo (de preferência o projeto inteiro) fala uma língua só

A forma de avisar o seu ambiente sobre qual dos dois ele deve interpretar muda conforme o runtime e o bundler do projeto, então confere a documentação oficial da ferramenta que você usa antes de sair mexendo na configuração

Tome cuidado! mudar isso no meio de um projeto grande mexe em todos os arquivos de uma vez, não é troca de uma linha só

Qual usar hoje: import ou require?

A pergunta que todo mundo faz, né?

Regra prática: projeto novo, vai de import, porque é a sintaxe da própria linguagem e é pra ela que o JavaScript aponta

Projeto legado em Node que já está inteirinho em require: não sai trocando por trocar, o custo de misturar é maior que o ganho de modernizar uma linha

E se você está aprendendo agora, foca no import e só reconheça o require quando ele aparecer, porque ele ainda aparece MUITO em código que está rodando por aí

Resumo rápido pra fechar:

require: sistema CommonJS, nasceu no mundo Node, exporta com module.exports e é resolvido no momento em que a linha executa

import: sistema ES Modules, veio com o ES6, entende export e também consegue consumir module.exports, e é analisado antes da execução

Leia também

CommonJS e ES Modules: os nomes por trás disso tudo

Antes de ir pro código, um detalhe que destrava sua vida

Quando você lê require, o nome do sistema de módulos por trás dele é CommonJS

Quando você lê import, o sistema é o ES Modules, ou ESM, como o pessoal escreve por aí

E por que isso importa? Porque quase toda discussão, erro de terminal e resposta de fórum sobre esse assunto usa esses dois nomes, e não "require" e "import"

Então guarda essa dupla de nomes, ela é a chave pra você procurar a solução certa quando travar 🙂

Carregamento: a diferença que quase ninguém comenta

Até aqui parece só sintaxe diferente, mas o comportamento também muda

O require é resolvido na hora em que aquela linha roda

Ele é uma chamada de função como qualquer outra, e por isso você consegue jogar ele dentro de um if, por exemplo

Já o import é declarativo: ele é lido antes do código rodar, o que deixa as ferramentas enxergarem exatamente o que entra e o que sai de cada arquivo

E por que isso é bom? Porque abre espaço pra otimização, tipo o tree shaking, que descarta o que você importou e nunca usou

Sacou por que o import não é só o require mais bonitinho? 😀

Dá pra misturar import e require no mesmo arquivo?

Aqui mora a maior dor de cabeça de quem está começando

São dois sistemas de módulos diferentes, com regras diferentes de carregamento, então misturar os dois no mesmo arquivo costuma terminar em erro

O caminho tranquilo é padronizar: o arquivo (de preferência o projeto inteiro) fala uma língua só

A forma de avisar o seu ambiente sobre qual dos dois ele deve interpretar muda conforme o runtime e o bundler do projeto, então confere a documentação oficial da ferramenta que você usa antes de sair mexendo na configuração

Tome cuidado! mudar isso no meio de um projeto grande mexe em todos os arquivos de uma vez, não é troca de uma linha só

Qual usar hoje: import ou require?

A pergunta que todo mundo faz, né?

Regra prática: projeto novo, vai de import, porque é a sintaxe da própria linguagem e é pra ela que o JavaScript aponta

Projeto legado em Node que já está inteirinho em require: não sai trocando por trocar, o custo de misturar é maior que o ganho de modernizar uma linha

E se você está aprendendo agora, foca no import e só reconheça o require quando ele aparecer, porque ele ainda aparece MUITO em código que está rodando por aí

Resumo rápido pra fechar:

require: sistema CommonJS, nasceu no mundo Node, exporta com module.exports e é resolvido no momento em que a linha executa

import: sistema ES Modules, veio com o ES6, entende export e também consegue consumir module.exports, e é analisado antes da execução

Leia também

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

6 Comentários
Oldest
Newest Most Voted
Rafael

Obrigado! Ajudou!

Battisti

de nada Rafael!

Marcelo

Muito Obrigado. Tirou a duvida. Seus conteúdos e vídeos sempre excelente!
Abraços.

Battisti

valeu Marcelo!

Gilberto

Estas explicações ajudaram muito porque sempre tive dúvidas quando via em alguns casos o uso do import e em outros o require. Muito bom.

Battisti

valeu Gilberto!

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares