【发布时间】:2016-01-05 06:15:31
【问题描述】:
在开发由多个页面和不同页面类型组成的普通网站时,我已经开始使用 Webpack。我习惯了 RequireJs 脚本加载器,它在需要时按需加载所有依赖项。页面加载时只下载一小段 javascript。
我想要实现的是:
- 一个小的初始 javascript 文件,用于异步加载依赖项
- 每种页面类型都可以有自己的 javascript,它们也可能有依赖关系。
- 通用模块、供应商脚本应捆绑在通用脚本中
我尝试了很多配置来实现这一点,但都没有成功。
entry: {
main: 'main.js', //Used on all pages, e.g. mobile menu
'standard-page': 'pages/standard-page.js',
'start-page': 'pages/start-page.js',
'vendor': ['jquery']
},
alias: {
jquery: 'jquery/dist/jquery.js'
},
plugins: [
new webpack.optimize.CommonsChunkPlugin("vendor", "vendor.js"),
new webpack.optimize.CommonsChunkPlugin('common.js')
]
在 html 中,我想像这样加载 javascript:
<script src="/Static/js/dist/common.js"></script>
<script src="/Static/js/dist/main.js" async></script>
并且在特定的页面类型上(起始页)
<script src="/Static/js/dist/start-page.js" async></script>
common.js 应该是一个用于快速加载页面的小文件。 main.js 在里面加载 async 和 require('jquery')。
Webpack 的输出看起来很有希望,但我无法让供应商捆绑包异步加载。其他依赖项(我自己的模块和 domReady)被加载到自动生成的块中,但不是 jquery。
我可以找到很多几乎可以做到这一点但不是异步加载供应商的重要部分的示例。
来自 webpack 构建的输出:
Asset Size Chunks Chunk Names
main.js.map 570 bytes 0, 7 [emitted] main
main.js 399 bytes 0, 7 [emitted] main
standard-page.js 355 bytes 2, 7 [emitted] standard-page
c6ff6378688eba5a294f.js 348 bytes 3, 7 [emitted]
start-page.js 361 bytes 4, 7 [emitted] start-page
8986b3741c0dddb9c762.js 387 bytes 5, 7 [emitted]
vendor.js 257 kB 6, 7 [emitted] vendor
common.js 3.86 kB 7 [emitted] common.js
2876de041eaa501e23a2.js 1.3 kB 1, 7 [emitted]
【问题讨论】:
标签: javascript jquery asynchronous webpack