Olá, Davi.
O erro ERR_UNSUPPORTED_DIR_IMPORT
indica que o Node.js não está conseguindo resolver os módulos corretamente. Isso geralmente acontece por causa de incompatibilidades de configuração no uso de ES Modules ou caminhos inválidos.
Aqui está como corrigir o problema:
1. Verifique se o type
no package.json
está configurado como module
:
Verifique o arquivo package.json
e adicione ou ajuste a propriedade type
para module
. Isso permite que o Node trate os arquivos como módulos ES.
{
"type": "module",
"scripts": {
"start": "node ./build/src/app.js"
}
}
2. Ajuste as extensões nos imports
:
Com ES Modules, as extensões precisam ser explícitas. Então, no arquivo petRouter.ts
, ajuste os imports
para:
import express from "express";
import PetController from "../controller/PetController.js";
Note o uso de .js
no caminho do import
. Isso é necessário mesmo se o código-fonte estiver em TypeScript, porque é o arquivo gerado no build que o Node irá usar.
3. Garanta que o tsconfig.json
está corretamente configurado:
O TypeScript precisa estar gerando arquivos compatíveis com ES Modules:
{
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "node",
"target": "ES2020",
"outDir": "./build",
"esModuleInterop": true,
"strict": true
}
}
Depois de fazer isso, apague a pasta build
, recompile o código com tsc
e tente rodar novamente.
4. Use caminhos relativos consistentes:
No arquivo petRouter.ts
, o trecho do código ficará assim:
import express from "express";
import PetController from "../controller/PetController.js";
const router = express.Router();
const petController = new PetController();
router.post("/", (req, res) => {
petController.criaPet(req, res);
});
export default router;
5. Execute novamente sua aplicação:
Após realizar todas as alterações, rode o TypeScript com:
tsc
E depois:
node ./build/src/app.js
Fico à disposição. Abraços e bons estudos!