AssetsBundler 1.0.1
dotnet add package AssetsBundler --version 1.0.1
NuGet\Install-Package AssetsBundler -Version 1.0.1
<PackageReference Include="AssetsBundler" Version="1.0.1"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="AssetsBundler" Version="1.0.1" />
<PackageReference Include="AssetsBundler"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add AssetsBundler --version 1.0.1
#r "nuget: AssetsBundler, 1.0.1"
#:package AssetsBundler@1.0.1
#addin nuget:?package=AssetsBundler&version=1.0.1
#tool nuget:?package=AssetsBundler&version=1.0.1
🚀 AssetsBundler
Minificador y bundler moderno para assets web (CSS, SCSS, LESS, JavaScript) con integración automática para proyectos .NET. Compatible con múltiples versiones de .NET Framework y .NET Core.
✨ Características
- ✅ Integración automática con MSBuild - Se ejecuta en cada build
- ✅ Soporte completo: CSS, SCSS, SASS, LESS, JavaScript
- ✅ Minificación inteligente con NUglify
- ✅ Compilación de preprocesadores (SCSS/SASS/LESS → CSS)
- ✅ Mensajes de error claros que identifican el archivo problemático
- ✅ Compatible con múltiples versiones de .NET:
- ✅ .NET Framework 4.6.1+
- ✅ .NET Core 2.0+
- ✅ .NET 5, 6, 7, 8, 9+
- ✅ Zero configuration - Funciona con configuración mínima
- ✅ Código síncrono - Sin dependencias de async/await
- ✅ Puede usarse como librería - Integra en tu propio código
📦 Instalación
dotnet add package AssetsBundler
O en Visual Studio:
Install-Package AssetsBundler
🎯 Uso Rápido
1. Instala el paquete (arriba)
2. Crea bundle.config.json en la raíz de tu proyecto:
{
"outputDirectory": "wwwroot/dist",
"bundles": [
{
"outputFileName": "css/site.min.css",
"inputFiles": [
"wwwroot/css/site.css",
"wwwroot/css/layout.css"
],
"minify": true,
"sourceMap": false
},
{
"outputFileName": "js/app.min.js",
"inputFiles": [
"wwwroot/js/main.js",
"wwwroot/js/utils.js"
],
"minify": true,
"sourceMap": false
}
]
}
3. ¡Listo! Se ejecuta automáticamente en cada build
dotnet build
# 🚀 AssetsBundler - Iniciando...
# 📦 Procesando 2 bundle(s)...
#
# 📄 css/site.min.css
# ✓ wwwroot/css/site.css (12.45 KB)
# ✓ wwwroot/css/layout.css (8.32 KB)
# ✓ Minificado: 20.77 KB → 15.23 KB (-26.7%)
# → wwwroot/dist/css/site.min.css (15.23 KB)
#
# 📄 js/app.min.js
# ✓ wwwroot/js/main.js (24.15 KB)
# ✓ wwwroot/js/utils.js (5.67 KB)
# ✓ Minificado: 29.82 KB → 18.45 KB (-38.1%)
# → wwwroot/dist/js/app.min.js (18.45 KB)
#
# ✅ Proceso completado: 2 bundle(s) generados exitosamente
# ✅ AssetsBundler completado exitosamente
🎨 Soporte de Formatos
CSS
{
"outputFileName": "css/styles.min.css",
"inputFiles": ["wwwroot/css/site.css"],
"minify": true
}
SCSS/SASS
{
"outputFileName": "css/styles.min.css",
"inputFiles": [
"Styles/variables.scss",
"Styles/layout.scss"
],
"minify": true
}
LESS
{
"outputFileName": "css/theme.min.css",
"inputFiles": ["Styles/theme.less"],
"minify": true
}
JavaScript
{
"outputFileName": "js/bundle.min.js",
"inputFiles": [
"wwwroot/js/app.js",
"wwwroot/js/components.js"
],
"minify": true
}
⚙️ Configuración Avanzada
Deshabilitar temporalmente
En tu .csproj:
<PropertyGroup>
<AssetsBundlerEnabled>false</AssetsBundlerEnabled>
</PropertyGroup>
Archivo de configuración personalizado
<PropertyGroup>
<AssetsBundlerConfigFile>assets.config.json</AssetsBundlerConfigFile>
</PropertyGroup>
Múltiples bundles
{
"outputDirectory": "wwwroot/dist",
"bundles": [
{
"outputFileName": "css/vendor.min.css",
"inputFiles": [
"node_modules/bootstrap/dist/css/bootstrap.css",
"node_modules/font-awesome/css/font-awesome.css"
],
"minify": true
},
{
"outputFileName": "css/app.min.css",
"inputFiles": [
"Styles/variables.scss",
"Styles/layout.scss",
"Styles/components.scss"
],
"minify": true
},
{
"outputFileName": "js/vendor.min.js",
"inputFiles": [
"node_modules/jquery/dist/jquery.js",
"node_modules/bootstrap/dist/js/bootstrap.js"
],
"minify": true
},
{
"outputFileName": "js/app.min.js",
"inputFiles": [
"wwwroot/js/main.js",
"wwwroot/js/utils.js"
],
"minify": true
}
]
}
Deshabilitar minificación (útil para debugging)
{
"outputFileName": "css/styles.css",
"inputFiles": ["Styles/main.scss"],
"minify": false
}
🐛 Mensajes de Error Detallados
AssetsBundler proporciona mensajes de error claros que identifican:
- ✅ El archivo exacto que causó el error
- ✅ La línea aproximada del problema
- ✅ El bundle que estaba siendo procesado
- ✅ Sugerencias para solucionar el error
╔════════════════════════════════════════════════════════════════╗
║ ❌ ERROR EN ASSETSBUNDLER ║
╚════════════════════════════════════════════════════════════════╝
📁 Configuración: bundle.config.json
Error al minificar CSS en el bundle 'css/site.min.css'.
📍 ARCHIVO PROBLEMÁTICO:
wwwroot/css/site.css
(Línea aproximada 145 en el archivo original)
📋 ARCHIVOS EN EL BUNDLE:
1. wwwroot/css/site.css (comienza en línea 1)
2. wwwroot/css/layout.css (comienza en línea 234)
❌ ERROR:
Errores al minificar CSS:
[ERROR] Línea 145, Columna 12: Expected closing brace
╔════════════════════════════════════════════════════════════════╗
║ 💡 SUGERENCIAS ║
╚════════════════════════════════════════════════════════════════╝
1️⃣ Abre el archivo indicado y revisa la línea mencionada
2️⃣ Busca llaves '{}' desbalanceadas o punto y coma faltantes
3️⃣ Valida tu CSS en: https://jigsaw.w3.org/css-validator/
4️⃣ Deshabilita minificación temporalmente: 'minify': false
5️⃣ Prueba procesando los archivos uno por uno
📋 Requisitos
.NET Standard 2.0 Compatible
- ✅ .NET Framework 4.6.1 o superior
- ✅ .NET Core 2.0 o superior
- ✅ .NET 5, 6, 7, 8, 9 o superior
Sistemas Operativos
- ✅ Windows
- ✅ Linux
- ✅ macOS
Tipos de Proyectos
- ✅ ASP.NET Core
- ✅ Blazor (Server y WebAssembly)
- ✅ Razor Pages
- ✅ MVC
- ✅ Web API
- ✅ Cualquier proyecto .NET que use MSBuild
🚀 Rendimiento
- Código síncrono optimizado para operaciones de I/O locales
- Procesamiento en batch de múltiples bundles
- Caché de procesadores para reutilización
- Minificación eficiente con reducción promedio del 30-40%
📊 Ejemplo de Proyecto
MiProyecto/
├── MiProyecto.csproj
├── bundle.config.json
├── wwwroot/
│ ├── css/
│ │ ├── site.css
│ │ └── layout.css
│ ├── js/
│ │ ├── main.js
│ │ └── utils.js
│ └── dist/ ← Archivos generados aquí
│ ├── css/
│ │ └── site.min.css
│ └── js/
│ └── app.min.js
└── Styles/
├── variables.scss
├── layout.scss
└── components.less
🔄 Integración con CI/CD
AssetsBundler funciona perfectamente en pipelines de CI/CD:
GitHub Actions
- name: Build
run: dotnet build --configuration Release
# AssetsBundler se ejecuta automáticamente
Azure DevOps
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/*.csproj'
# AssetsBundler se ejecuta automáticamente
GitLab CI
build:
script:
- dotnet build -c Release
# AssetsBundler se ejecuta automáticamente
🤝 Contribuir
Las contribuciones son bienvenidas! Por favor:
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/NuevaFeature) - Commit tus cambios (
git commit -m 'Add some NuevaFeature') - Push a la rama (
git push origin feature/NuevaFeature) - Abre un Pull Request
Reportar Bugs
Si encuentras un bug, por favor abre un issue con:
- Descripción del problema
- Pasos para reproducirlo
- Versión de AssetsBundler
- Versión de .NET
- Sistema operativo
📝 Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
MIT License
Copyright (c) 2025 Yafel Garcia
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
👤 Autor
Yafel Garcia
- GitHub: @Lexharden
- Proyecto: AssetsBundler
⭐ ¿Te gusta el proyecto?
Si AssetsBundler te resulta útil, ¡considera darle una estrella en GitHub! ⭐
🔗 Enlaces Útiles
- Página en NuGet
- Repositorio GitHub
- Reportar Issues
- Validador CSS W3C
- MDN Web Docs - CSS
- MDN Web Docs - JavaScript
❓ FAQ
¿Puedo procesar archivos TypeScript?
No directamente. Se recomienda compilar TypeScript a JavaScript primero y luego usar AssetsBundler para el bundling y minificación.
¿Funciona en Linux/macOS?
Sí, AssetsBundler es multiplataforma y funciona en Windows, Linux y macOS.
¿Cómo deshabilito AssetsBundler temporalmente?
Agrega <AssetsBundlerEnabled>false</AssetsBundlerEnabled> en tu .csproj.
Desarrollado con ❤️ por Yafel Garcia
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v1.0.1 -
- Compatible con .NET Framework 4.6.1+
- Compatible con .NET Core 2.0+
- Compatible con .NET 5, 6, 7, 8, 9+
- Identificación precisa de archivos con errores
- Mensajes de error mejorados