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!