typescript - Turborepo uvozni aliasi
Postavljam monorepo za nekoliko Typescript projekata na kojima radim i imam problema s aliasiranjem uvoza. Moja struktura direktorija je sljedeća
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 ima zadani izvezeni modul koji sadrži metode koje koristim za interakciju s Kafkom. Volio bih moći uvesti modul u project/apps/streaming koristeći put poput ovog
import {Kafka} from 'shared-utils/clients'
/* OR */
import Kafka from 'shared-utils/clients/Kafka'
Vidio sam nekoliko izvora o aliasiranju importova u TypeScriptu, ali je teško dobiti jasan odgovor o tome. Trenutno imam index.ts datoteke u svakom direktoriju u src koje se svežu prema glavnoj index.ts datoteci. Ovo je prilično nezgodno jer uvozi zahtijevaju 2 reda
import {Clients} from 'shared-utils'
import Kafka = Clients.Kafka
U ovom trenutku nisam ni siguran bih li trebao pokušavati konfigurirati ovo putem Typescripta, pnpm-a ili Turborepo-a. Nadam se da netko može pokazati koja konfiguracija treba biti promijenjena kako bih mogao uvoziti na način opisan gore. Hvala!