webpack 打包多页面应用

源码 2024-9-11 12:53:58 69 0 来自 中国
和传统的单页面应用打包差别,多页面应用实在就是设置多个入口,天生多个bundle。
下面就来看看详细应该怎么操纵吧

1.png
这是官方提供的示例,可以看到,entry变成了一个对象,而内里每一个键值对则就对应了我们每一个终极天生的bundle。文档所在:https://www.webpackjs.com/concepts/entry-points/#separate-app-and-vendor-entries
实在还好坏常简单的,原理上来说就是设置多个入口文件,使webpack天生多个依靠关系,从而构建出多个bundlejs。如许我们在差别的html文件引入对应的bundle就行了。
但是有一个题目,如许的设置我们每增长一个子页面都必要去写一个entry的键值对,非常的贫困。那有没有什么办法可以一次性获取到这些子页面然后主动天生entry呢?
答案是有的,借助glob这个库就可以完成。
glob这个库有个sync的方法,可以获取指定路径下的全部文件,有了这个我们不就可以一次性拿到全部的子页面了嘛。下面一起来看看详细操纵吧
起首下载以下这个库
npm i glob -Dconst setMPA = ()=>{    const entry = {}    const htmlWebpackPlugin = []    const entryFile = glob.sync('./pages/*/main.js')    entryFile.forEach((filePath,index)=>{        //根据获取到的路劲天生多入口entry对象        const entryName = filePath.split('/pages/')[1].split('/main.js')[0]        entry[entryName] = filePath        //接着天生每个入口的html模板        htmlWebpackPlugin.push(            new HtmlWebpackPlugin({                filename: `${entryName}.html`,                template: path.resolve(__dirname,`./pages/${entryName}/public/index.html`),                chunks: [entryName], //只打入指定的chunks,否则的话webpack会将全部bundle都引入                inject: true,//设置全部js资源放置在html得哪个位置                minify:{                    //压缩设置                    collapseWhitespace: true,                    preserveLineBreaks:false,                    html5:true,                    minifyCSS:true,                    minifyJS:true,                    removeComments: true,                }            })        )    })    return{        entry,        htmlWebpackPlugin    }}有了这个函数,就能拿到最新的entry以及最新的htmlWebpackPlugin设置。
目次结构如下

2.png
下面来看看结果


您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 18:24, Processed in 0.168522 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表