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
pathsi huvudpaketetstsconfig.jsonpekar på rätt sökväg. - Se till att bygga om de gemensamma paketets filer efter att ha satt
composite: truei desstsconfig.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.