Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro - entender -> type:module

Bom, estou usando ubuntu e inicialmente ao dar o comando "node ./server.js" comecei a ter o seguinte erro "SyntaxError: Cannot use import statement outside a module", que pode sinal já foi solucionado aqui neste post.

Bom, basicamente o que eu tive que fazer foi ir no arquivo packge.json e acrescentar a linha "type": "module" e assim o comando "node ./server.js" passou a funcionar normalmente.

Até aí estava tudo bem, mas quando cheguei na aula "Evitando erros com TypeScript rigoroso" e tive que dar o comando "npm start" me veio o seguinte erro:

17:19:46 - Starting compilation in watch mode...


17:19:49 - Found 0 errors. Watching for file changes.
file:///home/michel/Documentos/PROGRAMACAO/alura/formacao-nest-js/curso_01/typescript-para-backend/build/server.js:5
Object.defineProperty(exports, "__esModule", { value: true });
                      ^

ReferenceError: exports is not defined in ES module scope
This file is being treated as an ES module because it has a '.js' file extension and '/home/michel/Documentos/PROGRAMACAO/alura/formacao-nest-js/curso_01/typescript-para-backend/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
    at file:///home/michel/Documentos/PROGRAMACAO/alura/formacao-nest-js/curso_01/typescript-para-backend/build/server.js:5:23
    at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
    at async loadESM (node:internal/process/esm_loader:34:7)
    at async handleMainPromise (node:internal/modules/run_main:113:12)

Node.js v20.10.0

Eu resolvi isso simplesmente voltando no arquivo package.json e retirando a linha que eu tinha acabado de acrescentar ("type": "module").

Então eu gostaria de entender quando de fato preciso ou não dessa linha no arquivo, até porque depois da compilação eu vi que nos arquivos gerados ele acrescentou algo que não entendi muito bem, mas que me parece que tem a ver com essa linha em questão, como: "__esModule", { value: true }

desde já agradeço a ajuda.

1 resposta
solução!

Olá, Michel! Tudo bem?

Quando você adiciona "type": "module" no seu arquivo package.json, você está informando ao Node.js para tratar os arquivos .js como módulos ES6. Isso permite que você use a sintaxe 'import' e 'export' comum no front-end e em outras linguagens como Python.

No entanto, o erro que você está vendo quando tenta usar 'npm start' é porque o código que está sendo executado está tentando usar a sintaxe CommonJS (ou seja, 'exports' e 'require'), que não é permitida em módulos ES6.

A linha "__esModule", { value: true } que você mencionou é adicionada pelo compilador TypeScript para permitir que os módulos ES6 e CommonJS funcionem juntos. Isso é necessário porque, embora o TypeScript suporte ambos os tipos de módulos, o Node.js não.

Então, para responder à sua pergunta, você precisará adicionar "type": "module" ao seu arquivo package.json sempre que quiser usar a sintaxe 'import' e 'export' em seu código. No entanto, você terá que remover essa linha se estiver executando código que usa a sintaxe CommonJS (ou seja, 'exports' e 'require').

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.