Vyhledávání na webu

typescript - Turborepo aliasy importu


Nastavuji monorepo pro několik projektů v Typescriptu, na kterých pracuji, a mám problémy s aliasováním importů. Moje struktura adresářů je následující

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á výchozí exportovaný modul, který obsahuje metody, které používám k interakci s Kafka. Chtěl bych být schopen importovat tento modul v project/apps/streaming pomocí cesty takto

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

/* OR */

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

Viděl jsem několik zdrojů o aliasování importů v TypeScriptu, ale je těžké dostat jasnou odpověď. Momentálně mám soubory index.ts v každém adresáři v src, které se posílají nahoru do kořenového souboru index.ts. To je docela nepohodlné, protože importy vyžadují 2 řádky

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

V tuto chvíli si nejsem ani jistý, jestli bych měl zkoušet konfigurovat toto přes Typescript, pnpm nebo Turborepo. Doufám, že mi někdo může ukázat, jakou konfiguraci je třeba změnit, aby mi bylo umožněno importovat způsobem popsaným výše. Děkuji!