typescript - Aliases Import Turborepo


Saya sedang menyiapkan sebuah monorepo untuk beberapa projek Typescript yang sedang saya kerjakan dan saya menghadapi masalah dengan alias import. Struktur direktori saya adalah seperti berikut

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 mempunyai modul dieksport secara lalai yang mengandungi kaedah-kaedah yang saya gunakan untuk berinteraksi dengan Kafka. Saya ingin dapat mengimport modul itu dalam project/apps/streaming menggunakan path seperti ini

import {Kafka} from 'shared-utils/clients'

/* OR */

import Kafka from 'shared-utils/clients/Kafka'

Saya telah melihat beberapa sumber mengenai alias import TypeScript, tetapi sukar untuk mendapatkan jawapan yang jelas mengenai ini. Pada masa ini saya mempunyai fail index.ts di setiap direktori dalam src yang naik ke fail index.ts utama. Ini agak menyakitkan kerana import memerlukan 2 baris

import {Clients} from 'shared-utils'
import Kafka = Clients.Kafka

Pada masa ini saya tidak pasti sama ada saya patut mencuba untuk mengkonfigurasi ini melalui Typescript, pnpm, atau Turborepo. Saya berharap ada seseorang dapat menunjukkan konfigurasi apa yang perlu diubah untuk membolehkan saya mengimport seperti yang diterangkan di atas. Terima kasih!