Uso de Grunt, Bower, Gulp, NPM con Visual Studio 2015 para un proyecto ASP.NET 4.5

90

Visual Studio 2015 viene con soporte integrado para herramientas como Grunt, Bower, Gulp y NPM para proyectos ASP.NET 5.

Sin embargo, cuando creo un proyecto ASP.NET 4.5.2 usando Visual Studio 2015, no usa estas herramientas. Me gustaría usar bower en lugar de nuget para administrar los paquetes del lado del cliente.

Puedo encontrar información sobre el uso de estas herramientas con Visual Studio 2013 (consulte esta pregunta, por ejemplo). Pero supongo que el procedimiento es diferente para Visual Studio 2015, ya que tiene soporte integrado para estas herramientas.

Robert Hegner
fuente

Respuestas:

128

Si bien la respuesta de Liviu Costea es correcta, todavía me tomó bastante tiempo descubrir cómo se hace realmente. Así que aquí está mi guía paso a paso a partir de un nuevo proyecto ASP.NET 4.5.2 MVC. Esta guía incluye la administración de paquetes del lado del cliente usando bower pero (todavía) no cubre empaquetado / gruñido / trago.

Paso 1 (crear proyecto)

Cree un nuevo proyecto ASP.NET 4.5.2 (plantilla MVC) con Visual Studio 2015.

Paso 2 (Eliminar agrupación / optimización del proyecto)

Paso 2.1

Desinstale los siguientes paquetes de Nuget:

  • oreja
  • Microsoft.jQuery.Unobstrusive.Validation
  • jQuery.Validation
  • jQuery
  • Microsoft.AspNet.Web.Optimization
  • WebGrease
  • Antlr
  • Modernizr
  • Responder

Paso 2.2

Eliminar App_Start\BundleConfig.csdel proyecto.

Paso 2.3

Eliminar

using System.Web.Optimization;

y

BundleConfig.RegisterBundles(BundleTable.Bundles);

de Global.asax.cs

Paso 2.4

Eliminar

<add namespace="System.Web.Optimization"/>

de Views\Web.config

Paso 2.5

Quitar enlaces de ensamblaje para System.Web.Optimizationy WebGreasedeWeb.config

Paso 3 (agregar bower al proyecto)

Paso 3.1

Agregar nuevo package.jsonarchivo al proyecto ( NPM configuration fileplantilla de elemento)

Paso 3.2

Agregar bowera devDependencies:

{
  "version": "1.0.0",
  "name": "ASP.NET",
  "private": true,
  "devDependencies": {
    "bower": "1.4.1"
  }
}

El paquete bower se instala automáticamente cuando package.jsonse guarda.

Paso 4 (Configurar bower)

Paso 4.1

Agregar nuevo bower.jsonarchivo al proyecto ( Bower Configuration fileplantilla de elemento)

Paso 4.2

Añadir bootstrap, jquery-validation-unobtrusive, modernizry respondde dependencias:

{
  "name": "ASP.NET",
  "private": true,
  "dependencies": {
    "bootstrap": "*",
    "jquery-validation-unobtrusive": "*",
    "modernizr": "*",
    "respond": "*"
  }
}

Estos paquetes y sus dependencias se instalan automáticamente cuando bower.jsonse guarda.

Paso 5 (modificar Views\Shared\_Layout.cshtml)

Paso 5.1

Reemplazar

@Styles.Render("~/Content/css")

con

<link rel="stylesheet" href="~/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/Content/Site.css" />

Paso 5.2

Reemplazar

@Scripts.Render("~/bundles/modernizr")

con

<script src="~/wwwroot/lib/modernizr/modernizr.js" ></script>

Paso 5.3

Reemplazar

@Scripts.Render("~/bundles/jquery")

con

<script src="~/wwwroot/lib/jquery/dist/jquery.min.js"></script>

Paso 5.4

Reemplazar

@Scripts.Render("~/bundles/bootstrap")

con

<script src="~/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="~/wwwroot/lib/respond/dest/respond.min.js"></script>

Paso 6 (modificar otras fuentes)

En todas las demás vistas, reemplace

@Scripts.Render("~/bundles/jqueryval")

con

<script src="~/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

Enlaces útiles


Agrupación y minificación

En los comentarios a continuación, LavaHot recomienda la extensión Bundler & Minifier como reemplazo del empaquetado predeterminado que elimino en el paso 2. También recomienda este artículo sobre empaquetado con Gulp.

Robert Hegner
fuente
6
Muchas gracias. ¿Tengo razón en que hay un paso perdido: cómo mapear ~ / wwwroot a /../bower_components (o gulp / grunt config cómo mover paquetes de bower a "~ / wwwroot") ¿Podría agregar este paso y describir cómo lo haría? recomienda organizar el código js / css para ejecutar con IIS Express en el entorno VS2015?
Roman Pokrovskij
Cuando crea un bower.jsonarchivo a través de Visual Studio 2015, también creará automáticamente un bowerrcarchivo, que anula la ubicación predeterminada para las instalaciones de Bower desde bower_componentshastawwwroot/lib
Sagebrush GIS
1
Así que resulta bastante útil para mí. Ahora que ha eliminado el empaquetado predeterminado, me gustaría recomendar Bundler & Minifier para reemplazarlo. Utiliza Task Runner Explorer y tiene un archivo de configuración similar a npm y bower. También es parte de Web Essentials, por lo que es posible que ya lo tenga instalado.
LavaHot
1
Aquí hay un buen artículo sobre el tema para combinar con gulp.
LavaHot
1
¡Gracias por la información detallada @SagebrushGIS! También estoy investigando cómo agregar la administración de paquetes Bower a mi proyecto MVC. Agregué bower.json a través de VS2015, pero no veo el archivo bowerrc del que está hablando. ¿Algún paso que pueda faltar o dónde debería encontrar este archivo? Como solución temporal por ahora, uso: <link rel = "stylesheet" href = "~ / bower_components / bootstrap / dist / css / bootstrap.min.css" />
Guido Kersten
4

En realidad, no es muy diferente. Es solo que hay un mejor soporte para todos estos dentro de Visual Studio, por ejemplo, cuando agrega nuevos elementos, tiene plantillas para archivos de configuración de bower o npm. También tiene plantillas para archivos de configuración gulp o grunt.
Pero la llamada de tareas grunt / gulp y su vinculación para crear eventos aún se realiza con Task Runner Explorer, al igual que en VS 2013.

Liviu Costea
fuente
Supongo que todavía no veo cómo instalas paquetes npm en VS con la herramienta instalada. Cada vez que intento una instalación .npm, dice que mi proyecto no está configurado para el nodo o lo que sea
Mastro
primero debe crear package.json en la carpeta raíz. Normalmente lo creo en la raíz del proyecto de destino como hermano del archivo csproj. luego, puede usar los comandos npm
Roman