descobri que a diferença é basicamente que um veio para substituir o outro
Não é bem isso, tem várias diferenças:
require
é síncrono,import
é assíncronorequire
é compilado e executado assim que carregado,import
é compilado quando carregado e executado quando necessáriorequire
é backend e emulado no front, precisa de webpack pra funcionar,import
funciona no backend e no frontrequire
pode causar poluição de escopo global e reimportação de dependências circulares,import
evita isso e você precisa explícitamente (ou seja manualmente) injetar os valores no escopo global
Porque ainda encontro muitas pessoas/documentações utilizando CommonJS????
N motivos:
import
não é uma substituição direta derequire
, é uma alternativa padronizada mais moderna- ESM 6 não são diretamente compatíveis, e como tem muito projeto legado, não vai ter essa unificação tão cedo
require
é nítidamente mais prático queimport
, para um projeto pequenoimport
pode ser overengineering- Webpack e Babel podem unificar os dois padrões e quando fazem isso, fazem para
require
- O comportamento assincrono de
import
pode ser inconveniente as vezes
A recomendação mais óbvia é: Aprenda e pratique os 2 porque na próxima década require
mesmo que perca força vai ser muito usado