typescript - Turborepo Import Aliassen
Ik ben een monorepo aan het opzetten voor een paar Typescript-projecten waaraan ik werk en ik ondervind problemen met importaliasing. Mijn mappenstructuur is als volgt
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 heeft een standaard geëxporteerd module dat de methoden bevat die ik gebruik om met Kafka te communiceren. Ik zou graag de module willen kunnen importeren in project/apps/streaming met een pad zoals dit
import {Kafka} from 'shared-utils/clients'
/* OR */
import Kafka from 'shared-utils/clients/Kafka'
Ik heb verschillende bronnen gezien over TypeScript import aliasing, maar het is moeilijk om een duidelijk antwoord hierop te krijgen. Op dit moment heb ik index.ts-bestanden in elke map in src die omhooglopen naar een hoofd-index.ts-bestand. Dit is vrij vervelend omdat imports 2 regels vereisen.
import {Clients} from 'shared-utils'
import Kafka = Clients.Kafka
Op dit moment weet ik niet eens zeker of ik dit moet proberen te configureren via Typescript, pnpm of Turborepo. Ik hoop dat iemand kan aangeven welke configuratie gewijzigd moet worden om me toe te staan te importeren op de hierboven beschreven manier. Bedankt!