Vyhledávání na webu

typescript - UI balíček v Turborepo občas produkuje chybu TS - Nebyl nalezen deklarovaný soubor pro modul


Momentálně zkouším Turborepo a potýkám se s chybou TS, kterou se mi nedaří vyřešit.

Chybová zpráva zní:

Nelze najít soubor deklarace pro modul '@myapp/ui'. 'C:/myapp/packages/ui/dist/index.mjs' má implicitně typ 'any'.

Zkuste npm i --save-dev @types/myapp__ui, pokud existuje, nebo přidejte nový deklarovaný (.d.ts) soubor obsahující declare module '@myapp/ui';

Můj hlavní problém je, že se to děje nepravidelně. Někdy chyba je, a jindy po restartování TS serveru zmizí a pak zůstane pryč několik hodin.

Zde je struktura mého projektu:

.
├── apps
│   └── web
│       ├── src
│       │   └── [lang]
│       │       ├── layout.tsx
│       │       └── page.tsx
│       ├── package.json
│       └── tsconfig.json
├── packages
│   └── ui
│       ├── dist
│       ├── src
│       ├── package.json
│       ├── tsup.config.ts
│       └── tsconfig.json
├── package.json
└── turbo.json

Obsah mého souboru packages/ui/package.json:

{
  "name": "@myapp/ui",
  "version": "0.0.0",
  "sideEffects": false,
  "main": "./dist/index",
  "types": "./dist/index.d.mts",
  "exports": {
    ".": {
      "import": {
        "types": "./dist/index.d.mts",
        "default": "./dist/index.mjs"
      }
    }
  },
  "scripts": {
    "build": "tsup --format esm --minify",
    "dev": "tsup --format esm --minify --watch",
    "check-types": "tsx --noEmit",
    "lint": "eslint src/ --max-warnings 0",
    "ui:add": "pnpm dlx shadcn-ui@latest add"
  },
  "peerDependencies": {
    "next": "^14.1.1",
    "react": "^18.2.0"
  },
  "devDependencies": {
    "@myapp/eslint-config": "workspace:*",
    "@myapp/tailwind-config": "workspace:*",
    "@myapp/typescript-config": "workspace:*",
    "autoprefixer": "^10.4.16",
    "eslint": "^8.57.0",
    "postcss": "^8.4.38",
    "tailwindcss": "^3.4.3",
    "tsup": "^8.0.2",
    "typescript": "^5.3.3"
  }      
}

Zkoušel jsem změnit „types“ na „dist/index“, což dočasně funguje, a pak se chyba znovu objeví, a naopak, pokud to změním na „dist/index.d.mts“.

Správný soubor index.d.mts je skutečně ve složce dist, a vše v něm vypadá správně.

Tady je můj tsup.config.ts:

import { defineConfig, Options } from "tsup"

export default defineConfig((options: Options) => ({
  entry: ["src/**/*.tsx"],
  format: ["esm"],
  esbuildOptions(options) {
    options.banner = {
      js: '"use client"',
    }
  },
  dts: true,
  clean: true, // Clears the dist
  external: ["react", "next-intl"],
  ...options,
}))

Související články