Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] "type": "module" VS .mjs

De acordo com o aviso emitido pelo próprio node, a respeito do erro de importação de módulo, é possivel resolver o problema de importação adicionando a propriedade "type": "module" ao arquivo package.json, ou mudando a extensão dos arquivos javascript de .js para .mjs:

Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.

Realizando os testes, ambas as forma, de fato, resolveram o problema de importação, porém, gostaria de saber qual das duas formas é considerada melhor/boa prática nestes casos?

3 respostas

O que mais vejo por aí é a configuração "type": "module", dentro package.json, e nome_do_arquivo.js.

Apesar de sempre buscarmos as melhores práticas de mercado, o ideal é que sempre a gente chegue num novo projeto, a gente observe como ele está organizado, se existe algum padrão ou alguma convenção entre os/as devs do time.

Se no time que você está, as pessoas usam nome_do_arquivo.mjs, o ideal, neste caso, é que você tente seguir o padrão adotado pela equipe/projeto.

Porém, se caso você está entrando ou iniciando em um projeto do zero, o que é um pouco raro, mas é possível de acontecer, o ideal e a sugestão é que você siga o caso mais comum que se vê nos projetos: "type": "module", dentro package.json, e nome_do_arquivo.js.

Isso evita problemas de comunicação, pois é entendido como convenção. Uma convenção não é uma regra, mas podemos dizer que é um padrão bem visto e adotado pela comunidade.

Esse é apenas o meu ponto de vista sobre o assunto. Talvez outros/outras devs queiram colaboram com o assunto. =)

solução!

Olá Vanessa, obrigado pela resposta.

Após postagem desta pergunta, no decorrer da aula do curso, foi disponibilizado um o artigo "Um guia para importação e exportação de módulos com JavaScript" e acredito que ele tenha respondido a minha duvida.

Em resumo, a utilização da propriedade "type": "module" no arquivo package.json remete a forma proprietária que o node utilizava para realizar a importação/exportação de modulos, antes da especificação da linguagem (ECMA) padronizar o uso de import/ export.

Assim como hoje em dia é "aconselhável" optar por usar o import x from "X" invés da função require(), também seria indicado o uso de aquivos .mjs uma vez que eles são uma forma mais "oficial" de extensão de arquivo modulares (o node trabalhava primariamente com arquivos .cjs).

Como você mesmo disse, no final, fica a cargo de cada equipe de desenvolvedores decidir qual forma usar mas, se você tiver a oportunidade/liberdade de escolher, o melhor é seguir o que estiver definido na especificação.

Bom ponto! =)

E muito bom esse artigo da Juliana Amoasei!

Bons estudos!