Как сделать один пакет для многостраничного приложения с веб-пакетом? - PullRequest
1 голос
/ 17 марта 2019

У нас есть многостраничное приложение MVC. Клиентские сценарии написаны на Typescript. На данный момент мы не используем веб-пакет вообще. У нас есть отдельный модуль для каждой страницы, который содержит код для конкретной страницы. Также у нас есть куча «общих» модулей, которые импортируются «страничными» модулями. На данный момент у нас есть typcript, настроенный для компиляции каждого модуля в нашей папке Typescript и вывода результатов в wwwroot с сохранением их структуры папок. Модули скомпилированы в формате SystemJS, им присваиваются имена в соответствии с их путем, и SystemJS на стороне клиента может загружать их. То есть страница будет иметь следующий код:

<script type="text/javascript">
    $(function () {
      SystemJS.import('Home/Home.Index').then(function(m) {
        m.initialize();
      });
    });
  </script>

SystemJS получает модуль (при необходимости загружает его с хоста), и мы можем выполнить функцию инициализации из модуля.

Это прекрасно работает, но имеет недостаток, что мы не можем использовать сторонний импорт таким образом. То есть если я захочу импортировать какой-нибудь модуль вендора в мои скрипты, мне придется каким-то образом предоставить его странице, на которой будет выполняться скрипт. Мне придется скопировать его в каталог wwwroot, затем добавить его в качестве тега <script> и сделать несколько обходных путей в машинописном коде, чтобы получить доступ к его функциям.


Это приводит меня к пачке. Я хочу, чтобы все мои модули были объединены в единый пакет со всеми сторонними импортерами, включенными для однократной загрузки пользователем и кэширования браузером. На каждой странице я хочу вызвать определенный модуль и запустить его функцию инициализации. К сожалению, я не могу найти способ сделать это. В руководствах по Webpack говорится, что я должен создавать разные точки входа для разных страниц, но это приводит к десяткам пакетов, которые в значительной степени одинаковы (поскольку модули "page" часто ссылаются на "общие" модули и в каждом пакете повторяются "общие" модули) и это растворяет всю идею объединения.

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


Опять же, я хочу один пакет и вызов определенной функции из него на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...