Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Estou tentando iniciar uma Api de rotas no nodejs é da o seguinte erro:
C:\Users\arifu\ntask-api\node_modules\consign\lib\consign.js:121
/**
^
Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\l\ntask-api\models\tasks.js from C:\Users\arifu\ntask-api\node_modules\consign\lib\consign.js not supported.
tasks.js is treated as an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which declares all .js files in that package scope as ES modules.
Instead either rename tasks.js to end in .cjs, change the requiring code to use dynamic import() which is available in all CommonJS modules, or change "type": "module" to "type": "commonjs" in C:\Users\l\ntask-api\package.json to treat all .js files as CommonJS (using .mjs for all ES modules instead).
at Object.newLoader [as .js] (C:\Users\l\ntask-api\node_modules\pirates\lib\index.js:121:7)
at Consign.into (C:\Users\l\ntask-api\node_modules\consign\lib\consign.js:231:15)
at file:///C:/Users/l/ntask-api/index.js:11:3 {
code: 'ERR_REQUIRE_ESM'
Ja troquei type: module para type: commonjs e dá outros erros como na importação do express.
package.json
{
"name": "ntask-api",
"version": "1.0.0",
"description": "API de gestão de tarefas",
"main": "index.js",
"type": "module",
"scripts": {
"start": "babel-node index.js"
},
"author": "l",
"dependencies": {
"@babel/cli": "^7.0.0",
"@babel/core": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"consign": "^0.1.2",
"express": "^4.18.2"
},
"devDependencies": {
"@babel/core": "^7.0.0",
"@babel/node": "^7.0.0",
"@babel/preset-env": "^7.23.3"
}
}
index.js
import express from 'express';
import consign from 'consign';
const app = express();
consign()
.include("models")
.then("libs/middlewares.js")
.then("routes")
.then("libs/boot.js")
.into(app);
Você está lidando com um conflito entre módulos ES e CommonJS no seu projeto Node.js.
Quando você define "type": "module" no seu package.json, o Node.js espera que todos os arquivos .js usem a sintaxe de módulos ES6 (import/export). O problema é que o Consign, pelo que você descreveu, não suporta diretamente esta sintaxe.
Aqui estão algumas abordagens que você pode tentar:
Alterar o Tipo de Módulo:
Modifique "type": "module" para "type": "commonjs" no seu package.json. Isso exigirá que você atualize seu código para usar require e module.exports em vez de import e export.
Aqui está um exemplo de como seu index.js poderia ser alterado:
consign()
.include("models")
.then("libs/middlewares.js")
.then("routes")
.then("libs/boot.js")