node.js - "ERR_MODULE_NOT_FOUND"-fel vid användning av TypeScript-projektreferenser


Jag försöker implementera TypeScripts projekt-referenser för att kunna importera kod från ett gemensamt paket mellan min applikations tjänster.

Så här är tsconfig.json för det delade paketet (database_models) konfigurerat:

{
  "extends": "@tsconfig/node-lts/tsconfig.json",
  "include": ["src"],
  "compilerOptions": {
    "module": "NodeNext",
    "declaration": true,
    "outDir": "./dist",
    "declarationDir": "./types",
    "strict": true,
    "composite": true
  }
}

Och huvudpaketets tsconfig.json:

{
  "extends": "@tsconfig/node-lts/tsconfig.json",
  "include": ["src"],
  "references": [
    {
      "path": "../../lib/database_models"
    }
  ],
  "compilerOptions": {
    "module": "NodeNext",
    "declaration": true,
    "outDir": "./dist",
    "declarationDir": "./types",
    "strict": true,
    "paths": {
      "@database_models/*": ["../../lib/database_models/src/*"]
    }
  }
}

Importen:

import UsersModel from "@database_models/UsersModel.js";

Ger detta fel:

node:internal/modules/esm/resolve:854
  throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base), null);
        ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@database_models/UsersModel.js' imported from C:\Users\jpedr\Documents\Workshop\Work\twitter-engage-bot\apps\api\dist\managers\DatabaseManager.js
    at packageResolve (node:internal/modules/esm/resolve:854:9)
    at moduleResolve (node:internal/modules/esm/resolve:927:18)        
    at defaultResolve (node:internal/modules/esm/resolve:1157:11)      
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:383:12)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:352:25)  
    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:227:38)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:87:39)
    at link (node:internal/modules/esm/module_job:86:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

Node.js v20.15.0

Jag bygger huvudpaketets filer med tsc --build.

Här är vad jag har dubbelkollat:

  • Värdet paths i huvudpaketets tsconfig.json pekar på rätt sökväg.
  • Se till att bygga om de gemensamma paketets filer efter att ha satt composite: true i dess tsconfig.json

Svar #1

Jag hoppas detta hjälper i framtiden att ta bort .js-tillägget i importen

från importera UsersModel från "@database_models/UsersModel.js";

till import UsersModel from "@database_models/UsersModel";

Jag hoppas att detta hjälper. Om du har några frågor, tveka inte att höra av dig.

Relaterade artiklar