eQuantic.UIeQuantic.UI
Docs
Playground
GitHub
START HERE
Getting Started
WRITE-ONCE
Write-Once Components
Declarative Surface
Photon Engine
Design System
Capabilities
Storage
Forms
Code Editor
Markdown
Mermaid
Email Rendering
ARCHITECTURE
Architecture Overview
Package Architecture
Components
Styling
Localization
Analytics & GTM
COMPILATION
Compiler
Compile-Time Evaluation
Supported C# Features
External Type Resolution
Build Flow
Diagnostics
RUNTIME
Runtime (TypeScript)
Performance
SERVER
Server Integration
Assets
BunPackage
Security
ECOSYSTEM
Image
Charts
Icons
Lottie
DEVELOPMENT
Visual Editor
Debug
Roadmap
PT-BR
Analytics-pt-BR
Architecture-pt-BR
Assets-pt-BR
BuildFlow-pt-BR
BunPackage-pt-BR
Capabilities-pt-BR
Charts-pt-BR
CodeEditor-pt-BR
Compiler-pt-BR
CompileTimeEvaluation-pt-BR
Components-pt-BR
Debug-pt-BR
DeclarativeSurface-pt-BR
DesignSystem-pt-BR
Diagnostics-pt-BR
EmailRealizer-pt-BR
ExternalTypeResolution-pt-BR
Forms-pt-BR
GettingStarted-pt-BR
Home-pt-BR
Icons-pt-BR
Image-pt-BR
Localization-pt-BR
Lottie-pt-BR
Markdown-pt-BR
Mermaid-pt-BR
PackageArchitecture-pt-BR
Performance-pt-BR
Photon-pt-BR
Roadmap-pt-BR
Runtime-pt-BR
Security-pt-BR
ServerIntegration-pt-BR
Storage-pt-BR
Styling-pt-BR
SupportedFeatures-pt-BR
VisualEditor-pt-BR
WriteOnceComponents-pt-BR
ACTIONS & INPUTS
Button
IconButton
TextInput
Select
Checkbox
Switch
RadioGroup
SegmentedControl
Slider
Stepper
SearchField
SURFACES & DISPLAY
Card
Badge
Chip
Avatar
Banner
ProgressBar
EmptyState
Divider
NAVIGATION
Tabs
AppBar
BottomNavigation
Breadcrumb
Pagination
PageIndicator
Menu
Drawer
OVERLAYS
Dialog
BottomSheet
Toast
Popover
Tooltip
LISTS & DATA
List
ListView
Table
Accordion
CodeBlock
TOUCH INTERACTION
PullToRefresh
SwipeableRow
Docspt-BR
BunPackage: pacotes npm pelo .csproj
Edit this page
3 min read
🌐 Esta página em: English · Português
O eQuantic.UI permite declarar dependências de pacotes npm diretamente nos arquivos .csproj, mantendo a experiência de desenvolvimento 100% .NET, com zero package.json, zero npm e zero Node.js.
Começo rápido
1
2
3
4
<!-- MyApp.csproj -->
<ItemGroup>
<BunPackage Include="dayjs" Version="1.11.13" />
</ItemGroup>
É isso. No dotnet build, o SDK automaticamente:
1.
Gera um package.json temporário em obj/eQuantic/npm/
2.
Instala os pacotes usando o Bun embarcado
3.
Cria um symlink node_modules para as ferramentas resolverem
4.
Pula a instalação em builds incrementais
Como funciona
Pipeline de build
1
2
3
4
5
6
7
8
9
10
11
12
13
dotnet build
├── 1. ResolveBunPath ← Extrai o Bun embarcado do pacote NuGet
├── 2. InstallBunPackages ← NOVO: instala os itens <BunPackage>
│ ├── Cria obj/eQuantic/npm/package.json
│ ├── Roda: bun add <pacote>@<versão>
│ └── Symlink: node_modules → obj/eQuantic/npm/node_modules/
├── 3. CompileEQuanticUI ← C# → TypeScript → JavaScript
├── 4. CopyEQuanticRuntime ← Copia o runtime.js
Organização de arquivos
1
2
3
4
5
6
7
8
9
10
11
MyApp/
├── MyApp.csproj ← BunPackage declarado aqui
├── node_modules/ ← Symlink (no gitignore)
│ └── → obj/eQuantic/npm/node_modules/
├── obj/
│ └── eQuantic/
│ └── npm/ ← Escondido do desenvolvedor
│ ├── package.json ← Gerado automaticamente
│ ├── bun.lock ← Gerado automaticamente
│ └── node_modules/ ← Os pacotes de verdade
└── src/
O desenvolvedor nunca vê nem toca no package.json. O symlink node_modules está no gitignore e é criado automaticamente.
Exemplos de uso
Vários pacotes
Vários itens BunPackage são suportados. Cada um roda como um bun add separado:
1
2
3
4
<ItemGroup>
<BunPackage Include="dayjs" Version="1.11.13" />
<BunPackage Include="marked" Version="15.0.6" />
</ItemGroup>
Pacotes só de CSS
Funciona igualmente bem com pacotes só de CSS importados via @import:
1
2
3
<ItemGroup>
<BunPackage Include="tw-animate-css" Version="1.2.5" />
</ItemGroup>
1
2
/* src/styles.css */
@import "tw-animate-css";
Detalhes do target MSBuild
O target InstallBunPackages vive no Sdk.targets:
1
2
3
4
<Target Name="InstallBunPackages"
AfterTargets="ResolveBunPath"
BeforeTargets="CompileEQuanticUI"
Condition="'@(BunPackage)' != '' And '$(BunPath)' != ''">
Comportamentos-chave
Comportamento
Detalhes
Incremental
Pula se obj/eQuantic/npm/node_modules/ já existir
Build limpo
Roda bun add para cada pacote no primeiro build ou depois de um dotnet clean
Multiplataforma
Symlink no macOS/Linux, mklink /D no Windows
Isolamento
Os pacotes vivem em obj/, não na raiz do projeto
Sem poluição
Nenhum package.json, bun.lockb ou node_modules comitado no git
Forçando reinstalação
Para forçar uma instalação nova (por exemplo, depois de trocar versões):
1
2
3
4
5
6
# Opção 1: apague o cache npm
rm -rf obj/eQuantic/npm
# Opção 2: limpeza completa
dotnet clean
dotnet build
Decisões de design
Por que não gerar o package.json na raiz do projeto?
Polui o projeto .NET com artefatos npm
O desenvolvedor pode comitá-lo sem querer
Confunde as IDEs, que passam a tratá-lo como um projeto Node.js
Viola o princípio do "100% .NET"
Por que symlink em vez de NODE_PATH?
Symlinks são universalmente suportados pelas ferramentas que resolvem node_modules
O NODE_PATH tem comportamento inconsistente entre ferramentas
O symlink é transparente: se uma ferramenta procura node_modules/, ela encontra
Por que bun add em vez de bun install?
O bun add funciona com um package.json mínimo {"private": true}
O batching de itens do MSBuild (%(BunPackage.Identity)) mapeia naturalmente para chamadas individuais de bun add
Cada pacote é instalado na versão exata dele
Por que não usar bun x --install?
O bun x serve para rodar ferramentas de linha de comando, não para instalar bibliotecas
Pacotes referenciados em CSS (@plugin, @import) precisam existir em node_modules/
O bun add é a semântica correta para "instale esta biblioteca"
Comparação
Abordagem
Precisa de package.json
Precisa de npm/Node.js
Experiência de desenvolvimento
npm tradicional
Sim
Sim
Precisa gerenciar dois ecossistemas
BunPackage
Não
Não
.NET puro, zero atrito
Solução de problemas
Os pacotes não atualizam depois de mudar a versão
Causa: o node_modules já existe, então o InstallBunPackages pula
Correção:
1
2
rm -rf obj/eQuantic/npm
dotnet build
Erro de permissão de symlink no Windows
Causa: criar symlinks no Windows exige permissões elevadas ou o Modo de Desenvolvedor
Correção: ative o Modo de Desenvolvedor nas configurações do Windows, ou rode o terminal como Administrador
Documentação relacionada
Fluxo de build: a ordem completa de execução dos targets do MSBuild
Arquitetura de pacotes: o design de pacotes autocontidos
Gestão de assets: dependências de assets dos componentes