Компонент ASP.NET MVC 4 Script вызывает ошибки при развертывании - программирование
Подтвердить что ты не робот

Компонент ASP.NET MVC 4 Script вызывает ошибки при развертывании

Мой сайт отлично работает на localhost, когда @Scripts.Render() не связывает скрипты, однако, когда я развертываю на своем сервере, Javascript должен содержать ошибку, поскольку все Javascript на моей странице перестает работать.

Вот мой код связки:

        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js",
                    "~/Scripts/jquery-migrate-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                        "~/Scripts/jquery-ui-{version}.js",
                        "~/Scripts/jquery-ui.unobtrusive-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

            bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
        }

Вот мой код рендеринга:

@Styles.Render("~/Content/css")
@Styles.Render("~/Content/themes/base/css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/modernizr")

Может кто-нибудь объяснить, что может произойти с моим Javascript после развертывания?

Спасибо, Алекс.

4b9b3361

Ответ 1

Вы также можете изменить свой "новый ScriptBundle" на просто "новый пакет":

bundles.Add(new Bundle("~/bundles/modernizr").Include("~/Scripts/modernizr-*"));

Это будет связывать ваши активы без каких-либо изменений. Я столкнулся с некоторыми случаями, когда минимизация просто не будет работать с определенными библиотеками, поэтому это все равно позволит вам включить их в ваш пакет.

Ответ 2

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

Когда оптимизация включена, миниатюру можно выделить синтаксическую ошибку, которая будет прощена, если произошел разрыв строки. Например:

var x = 10
var y = 15

Неограниченный, это, вероятно, сработает - но уменьшилось, вы закончите с...

var x = 10 var y = 15 // SyntaxError: missing ; before statement

Что не будет работать - вам нужны отсутствующие символы ;.

Если вы отлаживаете script, вы должны увидеть, где находится ошибка.

Ответ 3

Минимизация "работает", даже если появляются эти ошибки

Реальное решение для этого:

  • Исключить файлы .min и .map ПЕРЕД. Вы публикуете

И минимизация будет работать. Фактически, процесс минимизации всегда работает!

Если "это работает", что это действительно происходит: почему мы имеем ошибку?

ASP.Net, по-видимому, использует файлы .min в приоритете при связывании с включенными оптимизациями. Таким образом, он также будет интегрировать любой код в .min файлы и добавлять каждый файл javascript один за другим без добавления разрывов строк.

браузер, который не может понять, почему существует потенциальный комментарий /* После конфигурации отображения мин: // # sourceMappingURL = jquery.history.min.js.map Поскольку вложенные файлы будут выглядеть так:

[SOMEJAVASCRIPT OF FILEJAVASCRIPT1 HERE;]
//# sourceMappingURL=jquery.history.min.js.map /* begin of a comment of FILEJAVASCRIPT2 appended (in the bundle) javascript file */

Существует два способа избежать этой ошибки:

  • Создайте отдельные пакеты для файлов javascript, которые не могут следовать (это не активирует функцию связывания).
  • Создайте пакет, который не будет включать минимизацию (плохо)
  • Или альтернатива: исключить все мини файлы или файлы min.js, которые имеют sourceMappingURL (или изменить их источник) и .map файлы.

Цель состоит в том, чтобы заставить ASP.Net самостоятельно восстанавливать мини файлы (и ASP.Net не сделает //sourceMappingUrl внутри его сгенерированного файла, чтобы устранить эту проблему).

Таким образом, реальной проблемой является текущая реализация этой функции внутри браузеров, потому что она не может обрабатывать комментарии для комментария sourcemapping. Возможно, есть еще один способ указать браузер, который закончился sourceMappingUrl.

Ответ 4

Проверьте это решение
Конфигурация IIS > Аутентификация > Анонимная авторизация RightClickOn > Нажмите "Редактирование" > "Проверить идентификатор пула приложений"

Взято из здесь.