網站搜尋

node.js - 使用 TypeScript 專案引用時出現「ERR_MODULE_NOT_FOUND」錯誤


我正在嘗試實作 TypeScript 的專案引用,以便能從我的應用程式服務之間共用的套件中匯入程式碼。

這就是共享套件(database_models)的 tsconfig.json 設定方式:

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

以及主要套件的 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/*"]
    }
  }
}

導入:

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

拋出此錯誤:

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

我正在使用 tsc --build 構建主套件的檔案。

這是我已經仔細檢查過的內容:

  • 主套件的 tsconfig.json 中的 paths 值指向正確的路徑。
  • 在其 tsconfig.json 中設置 composite: true 後,務必重新構建 common 套件的檔案

答案#1

我希望這對未來在匯入時移除 .js 副檔名有所幫助

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

到 import UsersModel from "@database_models/UsersModel";

我希望這對你有幫助。如果你有任何問題,隨時可以聯繫我。