typescript - Turborepo importné aliasy
Nastavujem monorepo pre niekoľko projektov v Typescripte, na ktorých pracujem, a mám problémy s aliasovaním importov. Moja adresárová štruktúra je nasledovná
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 má predvolený exportovaný modul, ktorý obsahuje metódy, ktoré používam na interakciu s Kafka. Chcel by som byť schopný importovať modul v project/apps/streaming pomocou cesty takto
import {Kafka} from 'shared-utils/clients'
/* OR */
import Kafka from 'shared-utils/clients/Kafka'
Videl som niekoľko zdrojov o aliasovaní importov v TypeScripte, ale je ťažké získať priamu odpoveď na toto. Momentálne mám súbory index.ts v každom adresári v src, ktoré sa spájajú do hlavného súboru index.ts. Je to dosť nepríjemné, pretože importy vyžadujú 2 riadky
import {Clients} from 'shared-utils'
import Kafka = Clients.Kafka
V tomto bode si ani nie som istý, či by som sa mal pokúšať toto konfigurovať cez Typescript, pnpm alebo Turborepo. Dúfam, že mi niekto môže ukázať, akú konfiguráciu je potrebné zmeniť, aby som mohol importovať spôsobom popísaným vyššie. Ďakujem!