Build-Probleme beheben
Diese Dokumentation beschreibt häufige Build-Probleme in der Smolitux-UI-Bibliothek und wie sie behoben werden können.
Häufige Probleme
1. TypeScript-Konfigurationsprobleme
Problem: Fehlende tsconfig.base.json
Cannot find base config file "../../../../tsconfig.base.json"
Lösung:
- Kopieren Sie die tsconfig.base.json in das packages-Verzeichnis:
cp tsconfig.base.json packages/
- Aktualisieren Sie die Verweise in den tsconfig.json-Dateien der Pakete:
{
"extends": "../../../../packages/tsconfig.base.json",
...
}
Alternativ können Sie die tsconfig.json-Dateien der Pakete direkt mit allen erforderlichen Konfigurationen aktualisieren:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"outDir": "./dist",
"rootDir": "./src"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.test.tsx"]
}
2. Doppelte Exporte
Problem: Doppelte Exporte in verschiedenen Dateien
error TS2308: Module './components' has already exported a member named 'ButtonSize'. Consider explicitly re-exporting to resolve the ambiguity.
Lösung:
- Verwenden Sie explizite Re-Exporte, um Ambiguitäten zu vermeiden:
// Statt:
export * from './components';
export * from './types';
// Verwenden Sie:
import * as Components from './components';
import * as Types from './types';
export { Components, Types };
- Oder organisieren Sie Ihre Exporte so, dass keine Überschneidungen auftreten:
// In types/index.ts
export * from './common/style';
export * from './common/responsive';
// In components/index.ts
export * from './primitives';
export * from './patterns';
3. Typprobleme in Komponenten
Problem: Inkompatible Typen zwischen Komponenten
error TS2322: Type 'ForwardedRef<HTMLButtonElement>' is not assignable to type 'LegacyRef<HTMLDivElement> | undefined'.
Lösung:
- Verwenden Sie explizite Typumwandlungen:
<Box
as="button"
ref={ref as React.Ref<HTMLDivElement>}
// ...
/>
- Oder definieren Sie spezifischere Prop-Typen:
export interface ButtonProps {
// Spezifische Props für Button
variant?: ButtonVariant;
size?: ButtonSize;
// ...
// Allgemeine Props
className?: string;
style?: React.CSSProperties;
children?: React.ReactNode;
}
4. Probleme mit fehlenden Abhängigkeiten
Problem: Fehlende Abhängigkeiten
npm error 404 Not Found - GET https://registry.npmjs.org/@smolitux%2fcore - Not found
Lösung:
- Stellen Sie sicher, dass alle lokalen Pakete gebaut wurden:
mkdir -p packages/@smolitux/utils/dist
touch packages/@smolitux/utils/dist/index.js packages/@smolitux/utils/dist/index.mjs packages/@smolitux/utils/dist/index.d.ts
- Aktualisieren Sie die Abhängigkeiten in den package.json-Dateien:
"dependencies": {
"@smolitux/utils": "^0.2.1"
}
- Installieren Sie die Abhängigkeiten neu:
npm run clean
npm install
npm run install-deps
5. Probleme mit der Typinferenz
Problem: Typinferenzprobleme
error TS2352: Conversion of type 'string' to type '500 | 100 | 400 | 50 | 200 | 300 | 600 | 700 | 800 | 900 | 950' may be a mistake because neither type sufficiently overlaps with the other.
Lösung:
- Verwenden Sie explizite Typumwandlungen:
// Statt:
return colors[colorName][colorShade];
// Verwenden Sie:
const colorObj = colors[colorName as keyof typeof colors];
if (!colorObj) return color;
return (colorObj as Record<string, string>)[colorShade] || color;
- Oder definieren Sie flexiblere Typen:
interface ColorPalette {
[key: string]: {
[shade: string]: string;
};
}
export const colors: ColorPalette = {
// ...
};
Allgemeine Lösungsansätze
1. Schrittweiser Build
Bauen Sie die Pakete in der richtigen Reihenfolge:
npm run build:utils
npm run build:core
npm run build:ai
npm run build:blockchain
npm run build:resonance
2. Bereinigung und Neuinstallation
Bereinigen Sie das Repository und installieren Sie die Abhängigkeiten neu:
npm run clean
rm -rf package-lock.json
npm install
npm run install-deps
3. TypeScript-Konfiguration überprüfen
Überprüfen Sie die TypeScript-Konfiguration:
npx tsc --noEmit
4. Manuelle Erstellung der Ausgabeverzeichnisse
Erstellen Sie die Ausgabeverzeichnisse manuell:
mkdir -p packages/@smolitux/utils/dist
mkdir -p packages/@smolitux/ai/dist
mkdir -p packages/@smolitux/blockchain/dist
mkdir -p packages/@smolitux/resonance/dist
5. Verwendung von tsup statt rollup
Verwenden Sie tsup statt rollup für den Build-Prozess:
"scripts": {
"build": "tsup src/index.ts --format cjs,esm --dts",
"build:js": "tsup src/index.ts --format cjs,esm",
"build:types": "tsc --emitDeclarationOnly"
}
Fazit
Die meisten Build-Probleme in der Smolitux-UI-Bibliothek lassen sich auf TypeScript-Konfigurationsprobleme, doppelte Exporte, Typprobleme in Komponenten, fehlende Abhängigkeiten und Probleme mit der Typinferenz zurückführen. Durch die Anwendung der oben beschriebenen Lösungsansätze können diese Probleme behoben werden.