2016-03-17 5 views
2

у меня есть два типа сгенерированных файлов JS:ссылки Обновление JS в HTML страницы для различных сред

  1. xyz.js
  2. xyz.min.js

Я хочу сослаться как на в разное время, для разных сред.

В настоящее время мне нужно обновить ссылки вручную, так как существует большое количество файлов JS: есть ли какая-либо техника, чтобы избежать ручного обновления. Это возможно?

+2

Вы вопрос не совсем понятен. Что вы пробовали? Что именно вы имеете в виду по ссылкам? Где у вас есть конкретные проблемы? –

+0

его вроде я хочу изменить внешнюю ссылку на файл js на html странице из одного файла в другой на основе контекста, хочу ли я использовать минитипированную версию или оригинальную. Например, заменить

0

Использование сторонних решений - не очень хорошая идея. Используйте вспомогательный класс для включения js и css-файлов. Также вы можете добавить vesioning для своих файлов (пользователю не нужен чистый кеш, если ваш js изменился).

В _Layout.cshtml:

@Html.IncludeJs("~/js/grid.js") 

Источник метода расширения IncludeJs:

public static class JavascriptExtension 
{ 
    public static MvcHtmlString IncludeJs(this HtmlHelper helper, string filename) 
    { 
     if (ConfigurationManager.AppSettings.Get("minimizeJs") == "true") 
     { 
      filename = Regex.Replace(filename, "\.js$", ".min.js"); 
     } 
     string version = GetVersion(helper, filename); 
     return MvcHtmlString.Create("<script src='" + VirtualPathUtility.ToAbsolute(filename) + version + "'></script>"); 
    } 

    private static string GetVersion(this HtmlHelper helper, string filename) 
    { 
     var context = helper.ViewContext.RequestContext.HttpContext; 

     if (context.Cache[filename] == null) 
     { 
      var physicalPath = context.Server.MapPath(filename); 
      var version = "?v=" + new System.IO.FileInfo(physicalPath).LastWriteTime.ToString("yyyyMMddhhmmss"); 
      context.Cache.Add(physicalPath, version, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero, CacheItemPriority.Normal, null); 
      context.Cache[filename] = version; 
      return version; 
     } 
     else 
     { 
      return context.Cache[filename] as string; 
     } 
    } 

}