Repository navigation
BunPackage es
🌐 Esta página en: English · Português · Español · Français · Deutsch
eQuantic.UI permite declarar dependencias de paquetes npm directamente en los archivos .csproj, manteniendo la experiencia de desarrollo 100% .NET con cero package.json, cero npm y cero Node.js.
<!-- MiApp.csproj -->
<ItemGroup>
<BunPackage Include="dayjs" Version="1.11.13" />
</ItemGroup>Eso es todo. En dotnet build, el SDK automáticamente:
- Genera un
package.jsontemporal enobj/eQuantic/npm/ - Instala los paquetes usando el runtime Bun embebido
- Crea un symlink
node_modulespara que las herramientas resuelvan - Se salta la instalación en los builds incrementales
dotnet build
│
├── 1. ResolveBunPath ← Extrae el Bun embebido del paquete NuGet
│
├── 2. InstallBunPackages ← NUEVO: instala los items <BunPackage>
│ ├── Crea obj/eQuantic/npm/package.json
│ ├── Ejecuta: bun add <paquete>@<versión>
│ └── Enlaza: node_modules → obj/eQuantic/npm/node_modules/
│
├── 3. CompileEQuanticUI ← C# → TypeScript → JavaScript
│
├── 4. CopyEQuanticRuntime ← Copia runtime.js
│
MiApp/
├── MiApp.csproj ← BunPackage se declara aquí
├── node_modules/ ← Symlink (en gitignore)
│ └── → obj/eQuantic/npm/node_modules/
├── obj/
│ └── eQuantic/
│ └── npm/ ← Oculto para quien programa
│ ├── package.json ← Autogenerado
│ ├── bun.lock ← Autogenerado
│ └── node_modules/ ← Los paquetes de verdad
└── src/
Quien programa nunca ve ni toca package.json. El symlink node_modules está en gitignore y se crea automáticamente.
Se admiten varios items BunPackage. Cada uno corre como un bun add aparte:
<ItemGroup>
<BunPackage Include="dayjs" Version="1.11.13" />
<BunPackage Include="marked" Version="15.0.6" />
</ItemGroup>Todos ellos se instalan (Desde 0.2.0-preview.62). Antes de eso solo el primero: la instalación
preguntaba "¿hay ya un node_modules?" otra vez antes de cada paquete, y el primer bun add ya lo
había creado.
Funciona igual de bien con paquetes solo de CSS importados vía @import:
<ItemGroup>
<BunPackage Include="tw-animate-css" Version="1.2.5" />
</ItemGroup>/* src/styles.css */
@import "tw-animate-css";El target InstallBunPackages vive en Sdk.targets:
<Target Name="InstallBunPackages"
AfterTargets="ResolveBunPath"
BeforeTargets="CompileEQuanticUI"
Condition="'@(BunPackage)' != '' And '$(BunPath)' != ''">| Comportamiento | Detalles |
|---|---|
| Incremental | Se salta si obj/eQuantic/npm/node_modules/ ya existe |
| Build limpio | Ejecuta bun add por cada paquete en el primer build o después de dotnet clean
|
| Multiplataforma | Un enlace simbólico en todos los sistemas, hecho por el SDK a través de la llamada propia del sistema y sin shell (Desde 0.2.0-preview.62). Windows pide el Modo de desarrollador o elevación para hacer uno, como hacía mklink /D. Lo que ya esté en node_modules se queda: un enlace de un build anterior, o una carpeta tuya |
| Aislamiento | Los paquetes viven en obj/, no en la raíz del proyecto |
| Sin contaminación | Ningún package.json, bun.lockb ni node_modules commiteado a git |
Para forzar una instalación fresca (por ejemplo, después de cambiar versiones):
# Opción 1: borrar la caché npm
rm -rf obj/eQuantic/npm
# Opción 2: limpieza completa
dotnet clean
dotnet build- Contamina el proyecto .NET con artefactos de npm
- Quien programa podría commitearlo por accidente
- Confunde a los IDEs, que lo tratan como un proyecto Node.js
- Viola el principio del "100% .NET"
- Los symlinks están soportados universalmente por las herramientas que resuelven node_modules
-
NODE_PATHtiene comportamiento inconsistente entre herramientas - El symlink es transparente: si una herramienta busca
node_modules/, los encuentra
-
bun addfunciona con un package.json mínimo{"private": true} - El batching de items de MSBuild (
%(BunPackage.Identity)) se mapea de forma natural a llamadas individuales debun add - Cada paquete se instala con su versión exacta
-
bun xes para ejecutar herramientas de CLI, no para instalar bibliotecas - Los paquetes referenciados en CSS (
@plugin,@import) tienen que existir ennode_modules/ -
bun addes la semántica correcta para "instala esta biblioteca"
| Enfoque | ¿Hace falta package.json? |
¿Hacen falta npm/Node.js? | Experiencia de desarrollo |
|---|---|---|---|
| npm tradicional | Sí | Sí | Hay que gestionar dos ecosistemas |
BunPackage |
No | No | .NET puro, cero friction |
Causa: node_modules ya existe, así que InstallBunPackages se lo salta
Arreglo:
rm -rf obj/eQuantic/npm
dotnet buildCausa: crear symlinks en Windows requiere permisos elevados o el Modo de desarrollador
Arreglo: activa el Modo de desarrollador en la Configuración de Windows, o ejecuta el terminal como Administrador
- Flujo de build: el orden completo de ejecución de los targets de MSBuild
- Arquitectura de paquetes: diseño de paquetes autocontenidos
- Gestión de assets: dependencias de assets de los componentes
🏁 Empieza aquí
🏗️ Arquitectura
- Visión general de la arquitectura
- Componentes write-once
- Superficie declarativa
- Arquitectura de paquetes
- Componentes
- Estilos
- Localización
- Analytics y GTM
📱 Write-once
- Motor Photon
- Design System
- Capacidades
- Almacenamiento
- Formularios
- Editor de código
- Markdown
- Mermaid
- Renderizado de email
⚙️ Compilación
⚡ Runtime
🔌 Servidor
🎨 Ecosistema
🚀 Desarrollo