TypeScript - aliasy importów w Turborepo
Tworzę monorepo dla kilku projektów w TypeScript, nad którymi pracuję, i mam problemy z aliasowaniem importów. Moja struktura katalogów wygląda następująco
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 ma moduł eksportowany domyślnie, który zawiera metody, których używam do interakcji z Kafka. Chciałbym móc importować ten moduł w project/apps/streaming używając takiej ścieżki
import {Kafka} from 'shared-utils/clients'
/* OR */
import Kafka from 'shared-utils/clients/Kafka'
Widziałem kilka źródeł dotyczących aliasów importu w TypeScript, ale trudno jest uzyskać jednoznaczną odpowiedź na ten temat. Obecnie mam pliki index.ts w każdym katalogu w src, które kumulują się do głównego pliku index.ts. To jest dość uciążliwe, ponieważ importy wymagają dwóch linii
import {Clients} from 'shared-utils'
import Kafka = Clients.Kafka
W tym momencie nie jestem nawet pewien, czy powinienem próbować konfigurować to przez Typescript, pnpm, czy Turborepo. Mam nadzieję, że ktoś będzie mógł wskazać, jaka konfiguracja musi zostać zmieniona, aby umożliwić mi import w opisany powyżej sposób. Dziękuję!