2013-05-07 3 views
2

Настройка мои связки следующим образом:Игнорирование одного файла в расслоении

bundles.UseCdn = true; 

var scriptJquery = new ScriptBundle(Bundles.Scripts.Jquery, "//code.jquery.com/jquery-1.9.1.js") 
    { 
     CdnFallbackExpression = "window.jQuery", 
    } 
    .Include("~/scripts/jquery-{version}.js"); // {version} not work! 

bundles.Add(scriptJquery); 

var scriptBundle = new ScriptBundle(Bundles.Scripts.Common) 
    { 
     Orderer = new FileBundleOrderer(server.MapPath("~/Scripts/bundle.txt")) 
    } 
    .IncludeDirectory("~/Scripts", "*.js", false); 
bundles.Add(scriptBundle); 

В моей папке сценариев имеют следующую структуру.
Обратите внимание, что jQuery находится на том же уровне, что и остальные.

Folder JS Structure

_Layout.cshtml

@Scripts.Render(CreditoImobiliarioBB.Web.App_Start.Bundles.Scripts.Jquery) 
@Scripts.Render(CreditoImobiliarioBB.Web.App_Start.Bundles.Scripts.Common) 

При запуске приложения генерируются следующие сценарии. Обратите внимание, что jQuery появился дважды!

<script src="/scripts/jquery-1.9.1.js"></script> <!-- <------ --> 

<script src="/Scripts/moment.js"></script> 
<script src="/Scripts/moment.pt-br.js"></script> 
<script src="/Scripts/handlebars.runtime.js"></script> 
<script src="/Scripts/knockout-2.2.1.debug.js"></script> 
<script src="/Scripts/knockout.mapping-latest.js"></script> 
<script src="/Scripts/underscore.js"></script> 
<script src="/Scripts/bootstrap.js"></script> 
<script src="/Scripts/bootstrap-datepicker.js"></script> 
<script src="/Scripts/bootstrap-datepicker.pt-BR.js"></script> 
<script src="/Scripts/bootstrap-multiselect.js"></script> 
<script src="/Scripts/bootstrap-typeahead.js"></script> 
<script src="/Scripts/accounting.js"></script> 
<script src="/Scripts/jquery.pnotify.js"></script> 
<script src="/Scripts/fileuploader.js"></script> 
<script src="/Scripts/jquery.inputmask.js"></script> 
<script src="/Scripts/jquery.inputmask.extensions.js"></script> 
<script src="/Scripts/jquery.inputmask.numeric.extensions.js"></script> 
<script src="/Scripts/jquery.inputmask.date.extensions.js"></script> 
<script src="/Scripts/jquery.maskMoney.js"></script> 
<script src="/Scripts/jquery.bootpag.js"></script> 
<script src="/Scripts/Email.js"></script> 
<script src="/Scripts/Endereco.js"></script> 
<script src="/Scripts/Telefone.js"></script> 
<script src="/Scripts/prototypes.js"></script> 
<script src="/Scripts/antiForgetyTokenHelper.js"></script> 
<script src="/Scripts/ajaxPost.js"></script> 
<script src="/Scripts/ajaxUploader.js"></script> 
<script src="/Scripts/jquery-1.9.1.js"></script> <!-- <------ --> 
<script src="/Scripts/jquery.cycle.all.js"></script> 
<script src="/Scripts/scripts.js"></script> 

Если я пытаюсь игнорировать файл JQuery, он не появляется в любом случае!

bundles.IgnoreList.Ignore("jquery-{version}.js", OptimizationMode.Always); 

Как игнорировать JQuery только в одном пучке? В случае, если Bundles.Scripts.Common

+1

Вы можете попробовать ответ Джон Малкольма здесь: http://stackoverflow.com/questions/13990622/asp-net-mvc-exclude-css-file-from-bundle –

+0

@SteveTemple Его помогает. Я думал что-то вроде 'Exclude = 'jquery. {Version} *. Js". – ridermansb

+0

Вы можете изменить метод расширения, указанный в приведенном выше URL-адресе –

ответ

3

Я просил @Jon Malcolm ответить, чтобы решить мою проблему.

public static class BundleExtentions 
{ 
    public static Bundle IncludeDirectoryWithExclusion(this ScriptBundle bundle, string directoryVirtualPath, string searchPattern, bool includeSubDirectories, params string[] toExclude) 
    { 
     var folderPath = HttpContext.Current.Server.MapPath(directoryVirtualPath); 
     SearchOption searchOption = includeSubDirectories 
             ? SearchOption.AllDirectories 
             : SearchOption.TopDirectoryOnly; 

     foreach (var file in from file in Directory.GetFiles(folderPath, searchPattern, searchOption) let fileName = Path.GetFileName(file) where String.IsNullOrEmpty(Array.Find(toExclude, s => fileName != null && s.ToLower() == fileName.ToLower())) select file) 
     { 
      bundle.Include(directoryVirtualPath + file.Replace(folderPath, string.Empty).Replace("\\", "/")); 
     } 

     return bundle; 
    } 
} 

Использование

mybundle.IncludeDirectoryWithExclusion("~/Directory", "*.js", true, "excluejsfile.js"); 

Надеется, что это может помочь вам.

+1

Я еще больше улучшил этот код, чтобы добавить шаблоны исключений и правильную обработку .min здесь: http://stackoverflow.com/a/36080620/1671558 –

Смежные вопросы