UzumakiItachi
首页
  • JavaSript
  • Vue

    • Vue2
    • Vue3
  • React

    • React_18
  • WebPack
  • 浏览器相关
  • 工程化相关
  • 工作中遇到的问题以及解决方案
  • Git
  • 面试
  • 学习
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 个人产出
  • 实用工具
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

UzumakiItachi

起风了,唯有努力生存。
首页
  • JavaSript
  • Vue

    • Vue2
    • Vue3
  • React

    • React_18
  • WebPack
  • 浏览器相关
  • 工程化相关
  • 工作中遇到的问题以及解决方案
  • Git
  • 面试
  • 学习
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 个人产出
  • 实用工具
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • WebPack

    • WebPack热更新原理
    • 实现一个通用的WebPack配置包
    • WebPack打包多页面应用
      • 前言
    • WebPack构建速度以及体积优化策略
    • 手写一个简易的WebPack
    • 实现一个简易的webpack-loader
    • 实现一个简易的Webpack-plugin
    • 深入WebPack code splitting
    • 实现一个合成雪碧图的loader
    • 实现一个压缩文件的plugin
    • webpack5都升级了哪些东西
    • 实现一个自动收集路由信息的webpack插件
  • 浏览器相关

  • 工程化相关

  • 工作中遇到的问题以及解决方案

  • Git

  • Vite

  • 一些小工具

  • 算法

  • 服务器

  • HTTP

  • 技术
  • WebPack
hanhanbuku
2023-03-03
目录

WebPack打包多页面应用

# 前言

和传统的单页面应用打包不同,多页面应用其实就是配置多个入口,生成多个bundle。 下面就来看看具体应该怎么操作吧

image

这是官方提供的示例,可以看到,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 -D
1
const 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
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

有了这个函数,就能拿到最新的entry以及最新的htmlWebpackPlugin配置。

目录结构如下 image

下面来看看效果

image

编辑 (opens new window)
上次更新: 2023/03/08, 09:35:38
实现一个通用的WebPack配置包
WebPack构建速度以及体积优化策略

← 实现一个通用的WebPack配置包 WebPack构建速度以及体积优化策略→

最近更新
01
前端检测更新,自动刷新网页
06-09
02
swiper渲染大量数据的优化方案
06-06
03
仿抖音短视频组件实现方案
02-28
更多文章>
Theme by Vdoing | Copyright © 2023-2025 UzumakiItachi | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式