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

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module (2)

A versão do meu Node é v12.16.3. Não tenho como atualizá-lo. Não sei se é esse o motivo do erro. Peço ajuda para fazer o programa rodar com módulos nesta versão. Agradeço.

8 respostas

Fala ai José, tudo bem? Apenas olhando o erro é um pouco complicado tentar lhe ajudar, o mesmo pode estar ocorrendo por N motivos (seja a versão do Node ou não).

Sendo assim, consegue compartilhar o projeto? Assim eu consigo simular o problema por aqui e analisá-lo com mais calma.

Pode compartilhar através do Github ou Google Drive (zipado).

Fico no aguardo.

Prezado Matheus, já fiz diversas tentativas e o erro persiste. Tenho certeza que o problema não é o meu código, mas sim, a minha versão do node v12.16.3 (a qual eu não posso alterar). Mas sei que na minha versão atual é possível resolver esse problema. Só que eu não possuo o conhecimento suficiente. Por isso, peço a sua ajuda.Na minha pesquisa, encontrei uma solução, mas não sei como implementá-la. Veja http://www.lib4dev.in/info/lpar/hello-express/261875788

Se precisar, o meu código: index.js:

import {Cliente} from "./Cliente.js";
import {ContaCorrente} from "./ContaCorrente.js";
const cliente1 = new Cliente();
const cliente2 = new Cliente();
const contaCorrenteRicardo = new ContaCorrente();
const contaCorrenteAlice = new ContaCorrente();
contaCorrenteRicardo.saldo = 20;
cliente1.qualquer = "QUALQUER"
//contaCorrenteAlice.saldo = 0;//
contaCorrenteRicardo.agencia = 1001;
contaCorrenteAlice.agencia = 1001;
console.log("O saldo inicial da Conta do Ricardo é = ", contaCorrenteRicardo.saldo);
contaCorrenteRicardo.depositar(100);
contaCorrenteAlice.depositar(100);
console.log("O saldo da Conta do Ricardo depois do depósito é = ", contaCorrenteRicardo.saldo);
const valorSacadoRicardo = contaCorrenteRicardo.sacar(25);
console.log("Valor sacado de Ricardo é: ", valorSacadoRicardo);
const valorSacadoAlice = contaCorrenteAlice.sacar(1);
console.log("Valor sacado de Alice é: ", valorSacadoAlice);
console.log("O saldo da Conta do Ricardo DEPOIS DO SAQUE é = ", contaCorrenteRicardo.saldo);
cliente1.nome = "Ricardo";
cliente1.cpf = 11122233309;
cliente2.nome = "Alice";
cliente2.cpf =  88822233309;
console.log("O Cliente1 é: ",cliente1);
console.log("O Cliente2 é: ",cliente2);
console.log("A Conta corrente de Ricardo é: ", contaCorrenteRicardo);

ContaCorrente.js:

export class ContaCorrente{
    agencia;
    #saldo = 0;
    sacar(valor){
        if(this.#saldo>=valor) {
            this.#saldo-=valor;
            console.log("O saldo real depois do saque é: ",this.#saldo);
            return valor
         }
    };
    depositar(valor){
        if(valor>0){
            this.#saldo += valor;
            this.saldo += 1;
            console.log("O saldo real depois do depósito é: ",this.#saldo, "o saldo sem # é", this.saldo);
        }
    }; 
}

Cliente.js:

export class Cliente {nome;cpf}

package.json:

{
  "name": "bytebank",
  "version": "1.0.0",
  "description": "Projeto do bytebank para seus clientes",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "type": "module"
}

Fala José, compartilha o projeto completo comigo, sobe ele no Google Drive (zipado), assim eu consigo simular o problema local em minha máquina e analisá-lo com mais calma.

Fico no aguardo.

Prezado Matheus, bom dia! (por favor, leia tudo) Peço a sua ajuda. Minha versão do Node é v12.16.3 (a qual eu não posso alterar). Para essa versão, ações adicionais são necessárias para fazer funcionar para o Node trabalhar com módulos. Na minha pesquisa, encontrei uma solução, mas não sei como implementá-la. Veja http://www.lib4dev.in/info/lpar/hello-express/261875788 . MAS, RESOLVI FAZER DIFERENTE. Peguei o projeto COMPLETO do próprio curso de JavaScript introdução a Orientação a Objetos (código do professor), rodei e deu o MESMO ERRO! Então eu peço a você que rode o mesmo projeto do curso, que está no link a seguir, utilizando a versão do Node v12.16.3, e me responda o que devo fazer para que funcione. O projeto está neste link: https://github.com/alura-cursos/js-orientacao-objetos/archive/aula3.zip Aguardo. Obrigado.

Fala José, eu sempre leito todas as respostas kkkk mas, seu problema é um pouco mais complexo para ajudar apenas com texto.

O problema é porque o Node a sua versão do Node por padrão não entende algumas sintaxes dos códigos, no caso, o ES Modules (export e import).

Podemos resolver de N maneiras a mais simples seria atualizando a versão do seu Node para a 14.x, você pode utilizar o nvm para gerenciar as versões do Node em sua máquina.

Dá para usar várias versões para diferentes projetos.

https://github.com/nvm-sh/nvm

Porem, caso não possa usar nem o nvm, você vai precisar transpilar o código JavaScript para um padrão mais antigo que a sua versão consiga executar.

Essa transpilação pode ser feita de N maneiras, a mais simples seria através da Biblioteca sucrase.

Instale ela no seu projeto:

npm i -D sucrase

Esse comando deve ser executado dentro da pasta do seu projeto, onde existe o arquivo package.json.

Uma vez que a instalação finalizou, tente executar o arquivo com:

npx sucrase-node index.js

Isso deve resolver o problema.

O próprio Sucrase será responsável por transpilar e executar seus códigos.

Espero ter ajudado.

Bom dia, Matheus. A solução que você ofereceu é muito complexa para o meu nível atual. Continuei pesquisando. E, GRAÇAS A DEUS, encontrei uma solução bem mais simples, no site: https://www.digitalocean.com/community/tutorials/new-ecmascript-modules-in-node-v12 . A versão que estou usando permite a utilização em módulos. Inseri a instrução "type": "module" no arquivo package.json, o node aceitou perfeitamente. Tanto é que pediu que eu inserisse o import no código do arquivo index.js. Eu já tinha inserido o import, mas faltava alguma coisa que não pude identificar. O node estava trabalhando com módulos. Entendi que não é necessário a transpilação. A solução é rodar o arquivo no powershell com o comando:

node --experimental-modules index.js

Mas, eu perdi 3 dias nisso. De qualquer for, agradeço.

solução!

Perfeito José, obrigado por compartilhar a solução. Comando "node --experimental-modules index.js" funcionou perfeitamente na versão 12 do node.

Boa José, fico feliz que tenha resolvido o problema.

Sempre que precisar não deixe de criar suas dúvidas.

E obrigado por compartilhar o --experimental-modules, vai ajudar muitos outros alunos, parabéns.

Abraços e bons estudos.