Zoeken op website

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!