typescript - Turborepo Import Aliasser
Jeg er ved at opsætte et monorepo for et par TypeScript-projekter, jeg arbejder på, og jeg har problemer med importaliaser. Min mappestruktur er som følger
project/
apps/
streaming/
package.json
tsconfig.json
src/
handlers/
KafkaHandler.ts
packages/
shared-utils/
package.json
tsconfig.json
src/
clients/
Kafka.ts
tsconfig/
base.json
project/packages/tsconfig/base.json{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Default",
"compilerOptions": {
"baseUrl": ".",
"declaration": true,
"declarationMap": true,
"esModuleInterop": true,
"module": "CommonJS",
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"target": "ES2019",
"types": ["node"]
}
}
project/packages/shared-utils/tsconfig.json{
"extends": "tsconfig/base.json",
"compilerOptions": {
"isolatedModules": true,
"baseUrl": "dist/src",
"outDir": "dist"
},
"include": [
"src"
],
"exclude": [
"node_modules"
]
}
project/apps/streaming/tsconfig.json{
"extends": "tsconfig/base.json",
"compilerOptions": {
"outDir": "dist"
},
"exclude": [
"node_modules"
],
"include": [
"./src"
],
}
project/apps/streaming/package.json{
"author": "",
"dependencies": {
"dotenv": "^16.3.1",
"kafkajs": "^2.2.4",
"lodash": "^4.17.21",
"minimist": "^1.2.8",
"prompts": "^2.4.2",
"shared-utils": "workspace:*",
"tiny-typed-emitter": "^2.1.0",
"tsconfig": "workspace:*"
},
"description": "",
"devDependencies": {
"@types/lodash": "^4.14.199",
"@types/node": "^20.8.10",
"@types/prompts": "^2.4.6",
"typescript": "^5.2.2"
},
"license": "ISC",
"main": "./dist/index.ts",
"name": "streaming",
"packageManager": "[email ",
"scripts": {
"build": "tsc",
"clean": "rm -rf dist && rm -rf node_modules",
"clean_build": "pnpm run clean && pnpm i && pnpm run build",
"test": "echo \"Error: no test specified\" && exit 1",
"compile": "tsc"
},
"version": "1.0.0"
}
projects/packages/shared-utils/src/clients/Kafka.ts har en standardeksporteret modul, som indeholder de metoder, jeg bruger til at interagere med Kafka. Jeg vil gerne kunne importere modulet i project/apps/streaming ved at bruge en sti som denne
import {Kafka} from 'shared-utils/clients'
/* OR */
import Kafka from 'shared-utils/clients/Kafka'
Jeg har set flere kilder om TypeScript import aliasing, men det er svært at få et klart svar på dette. Lige nu har jeg index.ts-filer i hver mappe i src, der bobler op til en rodfil index.ts. Dette er ret besværligt, fordi imports kræver 2 linjer
import {Clients} from 'shared-utils'
import Kafka = Clients.Kafka
På dette tidspunkt er jeg ikke engang sikker på, om jeg burde forsøge at konfigurere dette gennem Typescript, pnpm eller Turborepo. Jeg håber, at nogen kan pege på, hvilken konfiguration der skal ændres for at give mig mulighed for at importere på den måde, der er beskrevet ovenfor. Tak!