webpack4.x 系列(五) ☞ webpack多页面打包

单页面应用:整个应用里面只有一个html文件。现在主流的框架,vue,react都是单页面应用。所以webpack绝大部分都是对单页面打包。那么webpack如何对多页面进行打包

目录:

|- build
 |- webpack.common.js//公共webpack
 |- webpack.dev.js// 开发模式webpack,前期用merge合并
 |- webpack.prod.js// 生产模式webpack,前期用merge合并
|- src
 |- index.html// 模板文件
 |- index.js// index入口
 |- make.js// make.js入口
|- package.json

index.html与make.js

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<!-- 可以用htmlWebpackPlugin的title作为目录 -->
	<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
	<div id='root'></div>
</body>
</html>

index.js 与 make.js 两个文件都一样(代码如下),我这里用了react作为源文件,或者你可以根据自己的意愿写这两个文件的源代码,随便你怎么写,这章的目的是多页打包。

import React, { Component } from 'react';
import ReactDom from 'react-dom';
import _ from 'lodash';

class App extends Component {
	render() {
		return (
			<div>
				<div>{_.join(['This', 'is', 'App'], ' ')}</div>
			</div>
		)
	}
}

ReactDom.render(<App />, document.getElementById('root'));

webpack.common.js

entry入口配置:

  // 入口文件
  entry: {
    index: './src/index.js',
    make: './src/make.js'
  },

plugins的配置:

plugins : [
  // HtmlWebpackPlugin会在打包结束后,自动生成一个html文件,并把打包生成的js自动引入到这个html文件中
  new HtmlWebpackPlugin({
    template: 'src/index.html',
    filename: 'index.html',
        title: 'index',
    chunks: ['vendors', 'main']
  }),
  new HtmlWebpackPlugin({
    template: 'src/index.html',
    filename: 'make.html',
       title: 'make'
    chunks: ['vendors', 'list']
  }),
    // 用于清除dist目录
  new CleanWebpackPlugin()
];

这样子的多页打包就结束了。也可以进行正常的多页面打包了。执行打包命令npm run xxx,dist目录下就会多出两个html文件

里面的配置参数说明:

主要内容:

  • inject: true | body | head |false
  • chunks:允许插入到模板中的一些chunk,不配置此项默认会将entry中所有的chunk注入到模板中。在配置多个页面时,每个页面注入的thunk应该是不相同的,需要通过该配置为不同页面注入不同的chunk。
  • excludeChunks:这个与chunks配置项正好相反,用来配置不允许注入的thunk。

虽然说结束了,不过,如果页面入口一多的话,HtmlWebpackPlugin也会多起来,我们就会想到优化整合。

优化:

我先贴出代码,然后看我写的注释说明:

const makePlugins = (configs) => {
    // 获取key值,然后以数组的方式显示
    Object.keys(configs.entry).forEach(item => {
        // 每遍历一次就往里面添加HtmlWebpackPlugin
		plugins.push(
			new HtmlWebpackPlugin({
				template: 'src/index.html',
				filename: `${item}.html`,
				chunks: ['runtime', 'vendors', item]
			})
		)
	});
    return plugins;
}

// 通过对象的方式,给configs添加个plugins属性,属性名为makePlugins(configs)的的返回值
configs.plugins = makePlugins(configs);
// 起个名字,然后导出去
module.exports = configs;

优化完毕!这样子可以减少很多HtmlWebpackPlugin的代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值