Eu tenho um problema estranho com o empacotador mvc4 que não inclui arquivos com extensão .min.js
Na minha classe BundleConfig, declaro
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Scripts/jquery")
.Include("~/Scripts/jquery-1.8.0.js")
.Include("~/Scripts/jquery.tmpl.min.js"));
}
Na minha opinião, declaro
<html>
<head>
@Scripts.Render("~/Scripts/jquery")
</head><body>test</body>
</html>
E quando processa, apenas processa
<html>
<head>
<script src="/Scripts/jquery-1.8.0.js"></script>
</head>
<body>test</body>
</html>
Se eu renomear o jquery.tmpl.min.js para jquery.tmpl.js (e atualizar o caminho no pacote configurável adequadamente), os dois scripts serão renderizados corretamente.
Existe alguma configuração que está fazendo com que ele ignore os arquivos '.min.js'?
v
parâmetro hash que é adicionado ao url, e muda quando o conteúdo do arquivo mudar)Respostas:
A solução que postei originalmente é questionável (é um truque sujo). O comportamento aprimorado foi alterado no pacote Microsoft.AspNet.Web.Optimization e o ajuste não funciona mais, conforme apontado por muitos comentaristas. No momento, não consigo reproduzir o problema com a versão 1.1.3 do pacote.
Consulte as fontes de System.Web.Optimization.BundleCollection (você pode usar o dotPeek por exemplo) para entender melhor o que você está prestes a fazer. Leia também a resposta de Max Shmelev .
Resposta original :
Renomeie .min.js para .js ou faça algo como
fonte
A Microsoft implica o seguinte comportamento (e eu prefiro segui-lo em meus projetos):
versão curta
Como resultado, você terá automaticamente o script.js incluído no modo DEBUG e o script.min.js no modo RELEASE .
versão longa
Você também pode ter a versão .debug.js . Nesse caso, o arquivo é incluído na seguinte prioridade no DEBUG:
em LANÇAMENTO:
Nota
A propósito, o único motivo para ter versões .min de seus scripts no MVC4 é o caso em que a versão minificada não pode ser processada automaticamente. Por exemplo, o código a seguir não pode ser ofuscado automaticamente:
Em todos os outros casos, você pode usar apenas uma versão de depuração do seu script.
fonte
jquery.tmpl
) não tinham, não vieram, não foram baixados da versão não-mínima do arquivo. O bundler ignora os arquivos de script por completo, se ele não tem uma versão não-min no modo de depuraçãoSe tudo o que você tem é uma versão minificada de um arquivo, a solução mais simples que encontrei é copiar o arquivo minificado, remover .min do nome do arquivo copiado e referenciar o nome do arquivo não minificado em seu pacote.
Por exemplo, digamos que você comprou um componente js e eles forneceram um arquivo chamado some-lib-3.2.1.min.js. Para usar esse arquivo em um pacote configurável, faça o seguinte:
Copie some-lib-3.2.1.min.js e renomeie o arquivo copiado para some-lib-3.2.1.js. Inclua os dois arquivos no seu projeto.
Faça referência ao arquivo não minificado em seu pacote configurável, desta forma:
Só porque o arquivo sem 'min' no nome é realmente minificado não deve causar nenhum problema (além do fato de ser essencialmente ilegível). É usado apenas no modo de depuração e é gravado como um script separado. Quando não estiver no modo de depuração, o arquivo min pré-compilado deve ser incluído no seu pacote.
fonte
Eu encontrei uma boa solução que funciona pelo menos no MVC5, você pode simplesmente usar em
Bundle
vez deScriptBundle
. Não possui o comportamento inteligente deScriptBundle
que não gostamos (ignorando .min etc.) neste caso. Na minha solução, usoBundle
para scripts de festa em 3D com arquivos .min e .map e usoScriptBundle
para o nosso código. Não notei nenhuma desvantagem em fazê-lo. Para fazê-lo funcionar desta maneira, você precisará adicionar o arquivo original, por exemplo, angular.js, e ele carregará angular.js na depuração e agrupará o angular.min.js no modo de lançamento.fonte
ScriptTable.EnableOptimizations = false
). Os caminhos de script que contêm um padrão não são renderizados (por exemplo~/Scripts/thirdpartylib/*.js
). Ele faz o trabalho quandoEnableOptimizations = true
, mas o mesmo aconteceScriptBundle
.System.Web.Optimizations
configuráveis do namespace ou do pacote nugetMicrosoft.Web.Optimizations
?.min.js
existe apenas um arquivo e o*.js
padrão não corresponde aos arquivos que terminam em.min.js
.Para renderizar
*.min.js
arquivos, você deve desativarBundleTable.EnableOptimizations
, que é uma configuração global que se aplica a todos os pacotes configuráveis.Se você deseja ativar otimizações apenas para pacotes configuráveis específicos, é possível criar seu próprio
ScriptBundle
tipo que ativa temporariamente otimizações ao enumerar arquivos no pacote configurável.Use em
OptimizedScriptBundle
vez deScriptBundle
para pacotes configuráveis cujo arquivo minificado deve sempre ser usado, independentemente de existir um arquivo não minificado.Exemplo da interface do usuário do Kendo para o ASP.NET MVC, que é distribuído como uma coleção de apenas arquivos minificados.
fonte
Para o meu caso, eu estava usando a biblioteca Knockout.js (maravilhosa!), Que vem nas versões Debug / Non:
Para fazer isso funcionar, incluí "Knockout- {Version} .js" (sem depuração) no meu Bundle e obtive o .debug. arquivo js no modo de depuração.
fonte
Uma maneira fácil apenas renomeie o arquivo .min, por exemplo, você tem abc.min.css do que apenas renomeie esse arquivo para abc_min.css e adicione-o ao seu pacote configurável. Eu sei que não é o caminho certo para fazê-lo, mas apenas uma solução temporária. obrigado e feliz codificação.
fonte
Os empacotadores têm muitos benefícios, verifique esta página MAS :
A plataforma Microsoft MVC4 considera que você possui pelo menos a versão minificada e a versão não minificada para cada Script ou Pacote de estilos (outros arquivos como Debug e vsdoc também estão disponíveis). Portanto, temos problemas em situações em que existe apenas um desses arquivos.
Você pode alterar o estado de depuração no arquivo web.config permanentemente para manipular a saída:
Veja as alterações de saída! A filtragem de arquivos foi alterada. Para cumprir o objetivo, devemos mudar, ignorar a filtragem de casos que mudará a lógica da aplicação!
fonte
Pessoal, eu simplesmente manteria isso até a Microsoft conseguir agir em conjunto
Tente isto
Em RegisterBundles, crie este pacote para o Kendo
Em _Layout.cshtml, coloque isso:
Dessa forma, obtemos o melhor dos pacotes em Produção e uma referência em Debug
Corrija-o quando a Microsoft corrigir o código MVC 4
fonte