Повторное развертывание веб-приложения приводит к неопределенному внешнему виду случайных функций и объектов JavaScript - PullRequest
0 голосов
/ 29 апреля 2019

У нас есть Aurelia SPA, который обслуживается из приложения .NET MVC. SPA упакован с помощью Webpack.

При определенных условиях кажущиеся случайными функции и объекты JavaScript будут неопределенными. Мы не можем перейти на определенные маршруты из-за этого. Обновление браузера устраняет эти проблемы.

Шаги, которые мы обнаружили для воспроизведения этого поведения, не всегда надежны.

  1. SPA открывается в браузере (в частности, в данном случае Chrome).
  2. Мы развернули новую версию кода на нашем сервере; .NET и JavaScript.
  3. Ранее открытый браузер остается открытым около 12 часов

Тогда мы увидим подобные проблемы Cannot read property 'split' of undefined. при навигации по определенным маршрутам. Неопределенные объекты, препятствующие навигации по маршруту, не всегда одинаковы.

Я не могу воспроизвести это поведение на своем локальном хосте.

Не развертывая новый код, я оставил браузер открытым на выходные и вернулся к работающему приложению.

Любые предложения будут с благодарностью. Я не уверен, как развертывание может быть связано, поскольку браузер не должен знать о каких-либо изменениях сервера.

1 Ответ

0 голосов
/ 30 апреля 2019

Я исправил эту проблему, добавив к моим файлам фрагментов contenthash.

        path: path.resolve(bundleOutputDir),
        publicPath: "dist/",
        filename: "[name].js",
        chunkFilename: "[name].[contenthash].js",
      },

Наша сборка веб-пакетов выводит пару файлов. Большинство из них требуются при запуске и включены в index.cshtml домашнего контроллера нашего приложения MVC.

например. <script type="text/javascript" src="~/dist/app.js" asp-append-version="true"></script>

asp-append-version="true" добавляет версию к этим файлам, чтобы браузер знал, должен ли он загружать их из кэша или нет.

Проблема в том, что другие файлы чанков, которые выводятся из веб-пакета, не имеют такой ссылки. На них ссылаются файлы, на которые ссылается index.cshtml.

Это то, что, как я считаю, происходило.

  1. Веб-приложение будет открыто в браузере.
  2. Мы выпустим новый код на сервер.
  3. Браузер бездействует.
  4. Пользователь возвращается в браузер.
  5. Браузер выходит из режима ожидания и снова запрашивает файлы.
  6. Обновляются те, которые имеют asp-append-version="true", а те, которые имеют статическое имя, выбираются из кэша.
  7. Любое незначительное изменение в этом кэшированном файле приведет к удалению приложения из-за способа, которым веб-пакет объединяет файлы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...