Пакеты JS не отображаются без EnableOptimization, установленного в true
Я не знаю, что я делаю что-то неправильно, но это, вероятно, ошибка внутри MVC4. Интересно, как я могу это исправить?
Рабочий сценарий
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
ScriptBundle scriptBundle = new ScriptBundle("~/js");
string[] scriptArray =
{
"~/content/plugins/jquery/jquery-1.8.2.min.js",
"~/content/plugins/jquery/jquery-ui-1.9.0.min.js",
"~/content/plugins/jquery/jquery.validate.min.js",
"~/content/plugins/jquery/jquery.validate.unobtrusive.min.js",
"~/content/plugins/bootstrap/js/bootstrap.min.js",
};
scriptBundle.Include(scriptArray);
scriptBundle.IncludeDirectory("~/content/js", "*.js");
bundles.Add(scriptBundle);
BundleTable.EnableOptimizations = true;
}
}
@Scripts.Render("~/js")
Преобразует (например, IT WORKS!)
<script src="/js?v=VeCPNK561DZp34yjmWbLrNM35Kf6gaNDl0xsMMC25BQ1"></script>
Не так много рабочего сценария
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
ScriptBundle scriptBundle = new ScriptBundle("~/js");
string[] scriptArray =
{
"~/content/plugins/jquery/jquery-1.8.2.min.js",
"~/content/plugins/jquery/jquery-ui-1.9.0.min.js",
"~/content/plugins/jquery/jquery.validate.min.js",
"~/content/plugins/jquery/jquery.validate.unobtrusive.min.js",
"~/content/plugins/bootstrap/js/bootstrap.min.js",
};
scriptBundle.Include(scriptArray);
scriptBundle.IncludeDirectory("~/content/js", "*.js");
bundles.Add(scriptBundle);
// BundleTable.EnableOptimizations = true; // I could set it to 'false' for same result, it false by default
}
}
@Scripts.Render("~/js")
Преобразует (например, НЕ РАБОТАЕТ!)
(nothing, couple of empty break lines)
Ответы
Ответ 1
Если мое понимание верное, вы должны определить свои пакеты, используя "не-мин" файлы JavaScript. Когда вы включаете оптимизацию, он будет заменять не-мин файлы для файлов min для вас:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
ScriptBundle scriptBundle = new ScriptBundle("~/js");
string[] scriptArray =
{
"~/content/plugins/jquery/jquery-1.8.2.js",
"~/content/plugins/jquery/jquery-ui-1.9.0.js",
"~/content/plugins/jquery/jquery.validate.js",
"~/content/plugins/jquery/jquery.validate.unobtrusive.js",
"~/content/plugins/bootstrap/js/bootstrap.js",
};
scriptBundle.Include(scriptArray);
scriptBundle.IncludeDirectory("~/content/js", "*.js");
bundles.Add(scriptBundle);
}
}
Оптимизации при отладке устанавливаются как ложные, но по умолчанию они действительны в режиме деблокирования.
Ответ 2
да, он не работает должным образом с такими файлами, как *.min.js.
", если вы добавите файл в свой пакет, у которого есть имя, которое заканчивается на .min.js(как и я), и активизация arent не активирована (например, отладка установлена на true в web.config и BundleTable.EnableOptimizations не было set to true), этот файл будет проигнорирован (т.е. no script include будет сгенерированный для него в вашем html).
Здесь вы можете прочитать полный исходный ответ:
http://blog.degree.no/2013/06/javascript-file-missing-resource-bundle-asp-net-web-optimization-framework/