Repository navigation
BunPackage de
🌐 Diese Seite auf: English · Português · Español · Français · Deutsch
eQuantic.UI erlaubt es, Abhängigkeiten auf npm-Pakete direkt in .csproj-Dateien zu deklarieren, und hält die Entwicklungserfahrung damit 100% .NET, mit null package.json, null npm und null Node.js.
<!-- MeineApp.csproj -->
<ItemGroup>
<BunPackage Include="dayjs" Version="1.11.13" />
</ItemGroup>Das ist alles. Bei dotnet build tut das SDK automatisch:
- Erzeugt eine temporäre
package.jsoninobj/eQuantic/npm/ - Installiert die Pakete mit der eingebetteten Bun-Runtime
- Erzeugt einen
node_modules-Symlink, damit Werkzeuge auflösen - Überspringt die Installation bei inkrementellen Builds
dotnet build
│
├── 1. ResolveBunPath ← Entpackt das eingebettete Bun aus dem NuGet-Paket
│
├── 2. InstallBunPackages ← NEU: installiert die <BunPackage>-Items
│ ├── Erzeugt obj/eQuantic/npm/package.json
│ ├── Führt aus: bun add <Paket>@<Version>
│ └── Verlinkt: node_modules → obj/eQuantic/npm/node_modules/
│
├── 3. CompileEQuanticUI ← C# → TypeScript → JavaScript
│
├── 4. CopyEQuanticRuntime ← Kopiert runtime.js
│
MeineApp/
├── MeineApp.csproj ← BunPackage wird hier deklariert
├── node_modules/ ← Symlink (im gitignore)
│ └── → obj/eQuantic/npm/node_modules/
├── obj/
│ └── eQuantic/
│ └── npm/ ← Vor der Entwicklerin verborgen
│ ├── package.json ← Automatisch erzeugt
│ ├── bun.lock ← Automatisch erzeugt
│ └── node_modules/ ← Die echten Pakete
└── src/
Wer entwickelt, sieht und berührt die package.json nie. Der node_modules-Symlink ist im gitignore und wird automatisch erzeugt.
Mehrere BunPackage-Items werden unterstützt. Jedes läuft als eigenes bun add:
<ItemGroup>
<BunPackage Include="dayjs" Version="1.11.13" />
<BunPackage Include="marked" Version="15.0.6" />
</ItemGroup>Jedes einzelne wird installiert (Seit 0.2.0-preview.62). Davor nur das erste: Die Installation fragte
vor jedem Paket erneut "gibt es schon ein node_modules?", und das erste bun add hatte es gemacht.
Es funktioniert genauso gut mit Paketen, die nur CSS enthalten und über @import eingebunden werden:
<ItemGroup>
<BunPackage Include="tw-animate-css" Version="1.2.5" />
</ItemGroup>/* src/styles.css */
@import "tw-animate-css";Das Target InstallBunPackages lebt in Sdk.targets:
<Target Name="InstallBunPackages"
AfterTargets="ResolveBunPath"
BeforeTargets="CompileEQuanticUI"
Condition="'@(BunPackage)' != '' And '$(BunPath)' != ''">| Verhalten | Details |
|---|---|
| Inkrementell | Überspringt, wenn obj/eQuantic/npm/node_modules/ schon existiert |
| Sauberer Build | Führt beim ersten Build oder nach dotnet clean je Paket ein bun add aus |
| Plattformübergreifend | Ein symbolischer Link auf jedem System, vom SDK über den eigenen Aufruf des Systems und ohne Shell gemacht (Seit 0.2.0-preview.62). Windows verlangt den Entwicklermodus oder eine Erhöhung, um einen zu machen, wie mklink /D es tat. Was schon unter node_modules liegt, bleibt: ein Link eines früheren Builds, oder ein eigener Ordner |
| Isolation | Die Pakete leben in obj/, nicht in der Projektwurzel |
| Keine Verschmutzung | Keine package.json, keine bun.lockb, kein node_modules im git |
Um eine frische Installation zu erzwingen (zum Beispiel nach einem Versionswechsel):
# Variante 1: den npm-Cache löschen
rm -rf obj/eQuantic/npm
# Variante 2: vollständig aufräumen
dotnet clean
dotnet build- Es verschmutzt das .NET-Projekt mit npm-Artefakten
- Wer entwickelt, könnte sie versehentlich commiten
- Es verwirrt IDEs, die es als Node.js-Projekt behandeln
- Es verletzt das Prinzip "100% .NET"
- Symlinks werden von den Werkzeugen, die node_modules auflösen, allgemein unterstützt
-
NODE_PATHverhält sich von Werkzeug zu Werkzeug unterschiedlich - Der Symlink ist durchsichtig: Sucht ein Werkzeug nach
node_modules/, findet es sie
-
bun addfunktioniert mit einer minimalen{"private": true}-package.json - Das Item-Batching von MSBuild (
%(BunPackage.Identity)) bildet sich natürlich auf einzelnebun add-Aufrufe ab - Jedes Paket wird mit seiner exakten Version installiert
-
bun xdient dem Ausführen von CLI-Werkzeugen, nicht dem Installieren von Bibliotheken - Pakete, die in CSS referenziert werden (
@plugin,@import), müssen innode_modules/existieren -
bun addist die richtige Semantik für "installiere diese Bibliothek"
| Ansatz |
package.json nötig |
npm/Node.js nötig | Entwicklungserfahrung |
|---|---|---|---|
| Herkömmliches npm | Ja | Ja | Zwei Ökosysteme zu verwalten |
BunPackage |
Nein | Nein | Reines .NET, null Reibung |
Ursache: node_modules existiert schon, also überspringt InstallBunPackages
Behebung:
rm -rf obj/eQuantic/npm
dotnet buildUrsache: Symlinks unter Windows zu erzeugen verlangt erhöhte Rechte oder den Entwicklermodus
Behebung: Schalten Sie den Entwicklermodus in den Windows-Einstellungen ein, oder starten Sie das Terminal als Administrator
- Build-Ablauf: die vollständige Ausführungsreihenfolge der MSBuild-Targets
- Paketarchitektur: Entwurf eigenständiger Pakete
- Asset-Verwaltung: die Asset-Abhängigkeiten der Komponenten
🏁 Hier starten
🏗️ Architektur
- Architekturüberblick
- Write-once-Komponenten
- Deklarative Oberfläche
- Paketarchitektur
- Komponenten
- Styling
- Lokalisierung
- Analytics und GTM
📱 Write-once
- Photon-Engine
- Design System
- Fähigkeiten
- Speicher
- Formulare
- Code-Editor
- Markdown
- Mermaid
- E-Mail-Rendering
⚙️ Kompilierung
⚡ Runtime
🔌 Server
🎨 Ökosystem
🚀 Entwicklung