Usando Grunt, Bower, Gulp, NPM com Visual Studio 2015 para um projeto ASP.NET 4.5

90

O Visual Studio 2015 vem com suporte integrado para ferramentas como Grunt, Bower, Gulp e NPM para projetos ASP.NET 5.

No entanto, quando eu crio um projeto ASP.NET 4.5.2 usando o Visual Studio 2015, ele não usa essas ferramentas. Eu gostaria de usar o bower em vez do nuget para gerenciar pacotes do lado do cliente.

Posso encontrar informações sobre como usar essas ferramentas com o Visual Studio 2013 (consulte esta pergunta, por exemplo). Mas acho que o procedimento é diferente para o Visual Studio 2015, pois ele tem suporte integrado para essas ferramentas.

Robert Hegner
fonte

Respostas:

128

Embora a resposta de Liviu Costea esteja correta, ainda levei algum tempo para descobrir como isso é realmente feito. Portanto, aqui está meu guia passo a passo começando com um novo projeto ASP.NET 4.5.2 MVC. Este guia inclui o gerenciamento de pacotes do lado do cliente usando bower, mas (ainda) não cobre bundling / grunt / gulp.

Etapa 1 (Criar Projeto)

Crie um novo projeto ASP.NET 4.5.2 (modelo MVC) com o Visual Studio 2015.

Etapa 2 (Remover Empacotamento / Otimização do Projeto)

Etapa 2.1

Desinstale os seguintes pacotes Nuget:

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

Etapa 2.2

Remova App_Start\BundleConfig.csdo projeto.

Etapa 2.3

Remover

using System.Web.Optimization;

e

BundleConfig.RegisterBundles(BundleTable.Bundles);

de Global.asax.cs

Etapa 2.4

Remover

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

de Views\Web.config

Etapa 2.5

Remova as amarrações do conjunto para System.Web.Optimizatione WebGreasedeWeb.config

Etapa 3 (adicionar caramanchão ao projeto)

Etapa 3.1

Adicionar novo package.jsonarquivo ao projeto ( NPM configuration filemodelo de item)

Etapa 3.2

Adicionar bowera devDependencies:

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

O pacote bower é instalado automaticamente quando package.jsoné salvo.

Etapa 4 (configurar bower)

Etapa 4.1

Adicionar novo bower.jsonarquivo ao projeto ( Bower Configuration filemodelo de item)

Etapa 4.2

Adicionar bootstrap, jquery-validation-unobtrusive, modernizre responda dependências:

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

Esses pacotes e suas dependências são instalados automaticamente quando bower.jsoné salvo.

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

Etapa 5.1

Substituir

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

com

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

Etapa 5.2

Substituir

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

com

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

Etapa 5.3

Substituir

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

com

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

Etapa 5.4

Substituir

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

com

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

Etapa 6 (modificar outras fontes)

Em todas as outras visualizações, substitua

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

com

<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>

Links Úteis


Empacotamento e redução

Nos comentários abaixo, LavaHot recomenda a extensão Bundler & Minifier como um substituto para o bundler padrão, que removo na etapa 2. Ele também recomenda este artigo sobre empacotamento com Gulp.

Robert Hegner
fonte
6
Muito obrigado. Estou certo de que faltou uma etapa: como mapear ~ / wwwroot para /../bower_components (ou gulp / grunt config como mover pacotes Bower para "~ / wwwroot"). Você poderia adicionar esta etapa e descrever como faria recomendo organizar o código js / css para rodar com IIS Express no ambiente VS2015?
Roman Pokrovskij
Quando você cria um bower.jsonarquivo por meio do Visual Studio 2015, ele também cria automaticamente um bowerrcarquivo, que substitui o local padrão para as instalações do bower de bower_componentsparawwwroot/lib
Sagebrush GIS
1
Acontece que o empacotamento é bastante útil para mim. Agora que você removeu o bundler padrão, gostaria de recomendar o Bundler & Minifier para substituí-lo. Ele usa o Task Runner Explorer e tem um arquivo de configuração semelhante ao npm e bower. Ele também faz parte do Web Essentials, então você pode já tê-lo instalado.
LavaHot
1
Aqui está um bom artigo sobre o assunto para empacotar com gulp.
LavaHot
1
Obrigado pela informação detalhada @SagebrushGIS! Também estou investigando como adicionar o gerenciamento de pacotes Bower ao meu projeto MVC. Eu adicionei o bower.json via VS2015, mas não vejo o arquivo bowerrc de que você está falando. Alguma etapa que eu poderia estar faltando ou onde devo encontrar este arquivo? Como uma solução alternativa por enquanto, eu uso: <link rel = "stylesheet" href = "~ / bower_components / bootstrap / dist / css / bootstrap.min.css" />
Guido Kersten
4

Na verdade, não é muito diferente. Acontece que há um suporte melhor para tudo isso dentro do Visual Studio, por exemplo, quando você adiciona novos itens, você tem modelos para arquivos de configuração bower ou npm. Além disso, você tem modelos para arquivos de configuração gulp ou grunt.
Mas a chamada de fato de tarefas grunt / gulp e vinculando-as a eventos de construção ainda é feito com o Task Runner Explorer, assim como no VS 2013.

Liviu Costea
fonte
Acho que ainda não vejo como você instala pacotes npm no VS com a ferramenta instalada. Toda vez que tento uma instalação .npm, ele diz que meu projeto não está configurado para node ou qualquer outra coisa
Mastro
você precisa ter o package.json criado primeiro na pasta raiz. Normalmente crio isso na raiz do projeto de destino como irmão do arquivo csproj. então, você pode usar os comandos npm
Romano