javascript - Fel [ERR_MODULE_NOT_FOUND]: Kan inte hitta modul 'build\app' importerad från build\server.js


Jag använder TypeScript i ett Node-projekt. För att göra det enkelt och tydligt ser projektstrukturen ut så här:

    --src
      |-- server.ts
      |-- app.ts
    --build
      |-- server.js
      |-- app.js

server.ts:

import { app } from "./app";

const port = process.env.PORT || 5000;

app.listen(port, () => {
  console.log(`Server listens on 127.0.0.1:${port}`);
});

app.ts:

import express, { Express } from "express";
import bodyParser from "body-parser";
import { routes } from "./routes/index";

const app: Express = express();

app.use(bodyParser.json());
app.use("/", routes);

export {
  app,
};

tsconfig.json:

{
  "compilerOptions": {
    "target": "es6", 
    "module": "es2015",
    "outDir": "./build",
    "rootDir": "./src",
    "strict": true,
    "moduleResolution": "node",
    "esModuleInterop": true
  }
}

package.json:

  "scripts": {
    "build": "tsc",
    "start": "nodemon build/server",
    "test": "jest"
  },
  "type": "module",
.
.
.

Jag kör npm run build sedan kör jag npm start, jag fick detta fel:

internal/process/esm_loader.js:74
    internalBinding('errors').triggerUncaughtException(
                              ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\Users\x\Desktop\projects\done_list\build\app' imported from C:\Users\x\Desktop\projects\done_list\build\server.js
    at finalizeResolution (internal/modules/esm/resolve.js:270:11)
    at moduleResolve (internal/modules/esm/resolve.js:667:10)
    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:778:11)
    at Loader.resolve (internal/modules/esm/loader.js:85:40)
    at Loader.getModuleJob (internal/modules/esm/loader.js:229:28)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:51:40)
    at link (internal/modules/esm/module_job.js:50:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

Hur kan jag fixa det?

OS: Windows 10

Node: 14.9.0

Svar #1

Jag löste problemet genom att ta bort "type": "module" från package.json och uppdatera tsconfig.json:

{
  "compilerOptions": {
    "target": "es6", 
    "module": "commonjs",
    "outDir": "./build",
    "rootDir": "./src",
    "strict": true,
    "moduleResolution": "node",
    "esModuleInterop": true
  }
}