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";
我希望這對你有幫助。如果你有任何問題,隨時可以聯繫我。