如何使用webpack为多页应用制作单个捆绑包?

时间:2019-03-16 21:19:38

标签: typescript webpack

我们有一个多页MVC应用程序。客户端脚本使用Typescript编写。目前,我们根本不使用webpack。每个页面都有一个单独的打字稿模块,其中包含特定于页面的代码。另外,我们还有一堆“通用”模块,这些模块是通过“页面”模块导入的。现在,我们已经配置了打字稿,用于将每个模块编译到打字稿文件夹中,并将结果输出到wwwroot,以保留其文件夹结构。这些模块以SystemJS格式编译,并根据其路径分配名称,客户端的SystemJS可以加载它们。即该页面将包含以下代码:

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

SystemJS获取模块(必要时从主机下载它),我们可以从模块执行初始化功能。

这很好,但有一个缺点,就是我们不能以这种方式使用3rd party进口。即如果我想在脚本中导入一些供应商模块,则必须以某种方式将其提供给将执行脚本的页面。我必须将其复制到wwwroot目录,然后将其添加为<script>标记,并在打字稿代码中进行一些变通,以访问其功能。


这将我带到Webpack。我希望将我的所有模块合并到一个捆绑包中,其中包含所有第3方导入,以便由用户加载一次并由浏览器缓存。在每个页面上,我想调用特定的模块并运行它的初始化函数。不幸的是,我找不到办法。 Webpack手册指出,我应该为不同的页面设置不同的入口点,但这会导致数十个捆绑软件,它们大体上是相同的(因为“页面”模块大量引用“通用”模块,并且在每个捆绑软件中,“通用”模块都会重复)这消除了捆绑的整个想法。

我已经尝试过"splitChunks"优化,但实际上它消除了重复,但是会产生不可预测的文件数量,因此无法静态地将其包含在页面中,因为如果代码中的依赖项发生更改,这些文件可以显示或更改名称。


同样,我想要的是一个捆绑包,并在页面上从中调用特定功能。

0 个答案:

没有答案