У меня странная проблема с пакетом mvc4, не включая файлы с расширением .min.js
В моем классе BundleConfig я объявляю
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"));
}
На мой взгляд, я заявляю
<html>
<head>
@Scripts.Render("~/Scripts/jquery")
</head><body>test</body>
</html>
И когда он рендерит, он только рендерит
<html>
<head>
<script src="/Scripts/jquery-1.8.0.js"></script>
</head>
<body>test</body>
</html>
Если я переименую jquery.tmpl.min.js в jquery.tmpl.js (и соответствующим образом обновлю путь в комплекте), оба сценария будут отображены правильно.
Есть ли какой-либо параметр конфигурации, который заставляет его игнорировать файлы .min.js?
v
хэш параметра который добавляется в URL и изменяется при изменении содержимого файла)Ответы:
Решение, которое я первоначально отправил, сомнительно (грязный взлом). Поведение изменено в пакете Microsoft.AspNet.Web.Optimization, и оно больше не работает, как отмечают многие комментаторы. Прямо сейчас я не могу воспроизвести проблему вообще с версией 1.1.3 пакета.
Пожалуйста, ознакомьтесь с источниками System.Web.Optimization.BundleCollection (вы можете использовать dotPeek, например) для лучшего понимания того, что вы собираетесь делать. Также прочитайте ответ Макса Шмелева .
Оригинальный ответ :
Либо переименуйте .min.js в .js, либо сделайте что-то вроде
источник
Microsoft подразумевает следующее поведение (и я предпочитаю следовать этому в моих проектах):
укороченная версия
В результате вы будете автоматически были в script.js включены в DEBUG режиме и script.min.js в RELEASE режиме.
длинная версия
Вы также можете иметь версию .debug.js . В этом случае файл включен в следующий приоритет в DEBUG:
в выпуске:
нота
И, кстати, единственная причина наличия .min- версий ваших скриптов в MVC4 - это тот случай, когда минимизированная версия не может быть обработана автоматически. Например, следующий код не может быть скрыт автоматически:
Во всех остальных случаях вы можете использовать только отладочную версию вашего скрипта.
источник
jquery.tmpl
) не имели, не поставлялись, не загружались неминовой версии файла. Бандлер полностью игнорирует файлы сценариев, если у него нетЕсли все, что у вас есть, это минимизированная версия файла, самое простое решение, которое я нашел, это скопировать минимизированный файл, удалить .min из имени скопированного файла, а затем сослаться на неминифицированное имя файла в вашем комплекте.
Например, предположим, что вы приобрели компонент js, и они дали вам файл с именем some-lib-3.2.1.min.js. Чтобы использовать этот файл в комплекте, сделайте следующее:
Скопируйте some-lib-3.2.1.min.js и переименуйте скопированный файл в some-lib-3.2.1.js. Включите оба файла в свой проект.
Ссылка на не минимизированный файл в вашем комплекте, например:
Просто потому, что файл без 'min' в имени на самом деле минимизирован, не должно вызывать каких-либо проблем (кроме того факта, что он по сути не читается). Он используется только в режиме отладки и записывается в виде отдельного скрипта. Когда не в режиме отладки, предварительно скомпилированный файл min должен быть включен в ваш пакет.
источник
Я нашел хорошее решение, которое работает по крайней мере в MVC5, вы можете просто использовать
Bundle
вместоScriptBundle
. Он не имеет умного поведения,ScriptBundle
которое нам не нравится (игнорируя .min и т. Д.) В этом случае. В моем решении я используюBundle
сценарии для сторонних разработчиков с файлами .min и .map и используюScriptBundle
для нашего кода. Я не заметил никаких недостатков в этом. Чтобы заставить его работать таким образом, вам нужно добавить оригинальный файл, например angular.js, и он будет загружать angular.js в режиме отладки и связывать angular.min.js в режиме выпуска.источник
ScriptTable.EnableOptimizations = false
). Пути сценария, содержащие шаблон, не отображаются (например~/Scripts/thirdpartylib/*.js
). Это делает работу , когдаEnableOptimizations = true
, но точно так жеScriptBundle
.System.Web.Optimizations
или из пакета nugetMicrosoft.Web.Optimizations
?.min.js
файл, и*.js
шаблон не соответствует файлам, оканчивающимся на.min.js
.Для рендеринга
*.min.js
файлов необходимо отключитьBundleTable.EnableOptimizations
, что является глобальным параметром, который применяется ко всем пакетам.Если вы хотите включить оптимизацию только для определенных пакетов, вы можете создать свой собственный
ScriptBundle
тип, который временно включает оптимизации при перечислении файлов в пакете.Используйте
OptimizedScriptBundle
вместоScriptBundle
пакетов, чей минимизированный файл должен использоваться всегда, независимо от того, существует ли неминифицированный файл.Пример для Kendo UI для ASP.NET MVC, который распространяется как коллекция только минимизированных файлов.
источник
В моем случае я использовал (замечательно!) Библиотеку Knockout.js, которая поставляется в виде отладочной / не версии:
Чтобы сделать это, я включил «Knockout- {Version} .js» (без отладки) в свой Bundle и получил .debug. JS-файл в режиме отладки.
источник
Простой способ - просто переименовать файл .min, например, у вас есть abc.min.css, чем просто переименовать этот файл в abc_min.css и добавить его в свой пакет. Я знаю, что это не правильный способ сделать это, а просто временное решение. спасибо и счастливого кодирования.
источник
Bundler имеет много преимуществ, проверьте эту страницу, НО :
Платформа Microsoft MVC4 Предполагается, что у вас есть как минимум минифицированная версия, так и не минимизированная версия для каждого Script или Style Bundle (также доступны другие файлы, такие как Debug и vsdoc). Поэтому у нас возникают проблемы в ситуациях, когда существует только один из этих файлов.
Вы можете изменить состояние отладки в файле web.config навсегда для обработки вывода:
Смотрите выходные изменения! Фильтрация файлов изменена. Для достижения цели мы должны изменить игнорирование фильтрации случаев, что изменит логику приложения!
источник
Люди, я бы просто держал это, пока Microsoft не соберет это вместе
Попробуй это
В RegisterBundles создайте этот пакет для Kendo
В _Layout.cshtml поместите это:
Таким образом, мы получаем лучшие комплекты в Production и ссылку в Debug.
Исправьте это, когда Microsoft исправляет их код MVC 4
источник