一、解决什么问题

     1、手写页面多入口,一个一个输入太麻烦,通过代码实现

     2、手写多个htmlWebpackPlugin插件太麻烦,通过代码实现

二、多入口代码实现

 //读取所有.js文件,动态设置多入口
function getEntry() {
var entry = {};
//读取src目录下page下的所有.js文件
glob.sync('./src/pages/**/*.js')
.forEach(function (name) {
let start = name.indexOf('src/') + 10,
end = name.length - 3;
let n = name.slice(start, end);
let key = n.slice(0, n.lastIndexOf('/')); //保存各个组件的入口
// console.log(key);
entry[key] = name;
});
return entry;
};

  修改module.exports的入口entry,注释掉原来手写的代码,改成上面的方法如下:

  

三、多htmlWebpackPlugin插件代码实现

 //插入htmlWebpackPlugin
(function(){
//取得配置的入口key
const entryObj = getEntry();
//存储路径和chunks
const htmlArray = [];
for(let key in entryObj){
htmlArray.push({
html: key,
chunks: ['vendor', 'common', key]
})
}
//自动生成html模板
htmlArray.forEach((element) => {
module.exports.plugins.push(new htmlWebpackPlugin(getHtmlConfig(element.html, element.chunks)));
});
})();
module.exports.plugins是配置文件当中的plugins数组,getHtmlConfig方法主要是返回htmlWebpackPlugin的配置,代码如下:
 // 设置html-webpack-plugin参数,返回参数对象
let getHtmlConfig = function (name, chunks) {
var _template = `./src/pages/${name}/index.html`;
var _filename = `${name}/index.html`;
//index单独处理
if (name === "index") {
_filename = `index.html`;
}
let config = {
template: _template,
filename: _filename,
// favicon: './favicon.ico',
// title: title,
inject: true, //设置为true插入的元素放入body元素的底部
hash: true, //开启hash ?[hash]
chunks: chunks,
minify: process.env.NODE_ENV === "development" ? false : {
removeComments: true, //移除HTML中的注释
collapseWhitespace: true, //折叠空白区域 也就是压缩代码
removeAttributeQuotes: true, //去除属性引用
}
};
return config;
};

  注释掉原来module.exports.plugins配置当中手写的HtmlWebpackPlugin

四、测试

  1、在src中的pages目录当中新建index2文件夹,下面新建index.js和index.html

      2、运行webpack命令查看效果,如下图:

  

五、实现思路

  1、入口以文件的目录为key,js文件的具体路径为值

2、根据入口文件的key拼接.html文件模板路径,key直接作为chunks的值

3、往module.exports.plugins的数组中插入HtmlWebpackPlugin对象

源码地址:https://github.com/James-14/webpack4_multi_page_demo

写的不对之处请大家批评指正~~~~!!!!!!

文章原创,转载请注明出处,谢谢!

基于webpack实现多html页面开发框架四 自动写入多入口,自动插入多个htmlWebpackPlugin插件的更多相关文章

  1. 基于webpack实现多html页面开发框架一 准备工作

    本系列主要介绍如何基于webpack实现多html页面开发框架,这里不讲webpack的基本概念,废话不多说,直奔主题! 前置条件: 1.安装node环境,自己去官网下载安装 2.新建文件夹webpa ...

  2. 基于webpack实现多html页面开发框架二 css打包、支持scss、文件分离

    本节主要介绍webpack打包的时候CSS的处理方式 一.解决什么问题      1.CSS打包      2.CSS处理浏览器兼容      3.SASS支持      4.CSS分离成单独的文件 ...

  3. 基于webpack实现多html页面开发框架六 提取公共代码

    一.解决什么问题 1.如果a.js和b.js都引用了common.js,那在打包的时候common.js会被重复打入到a.js和b.js,造成重复打包 2.单独打包common.js对性能有帮助,浏览 ...

  4. 基于webpack实现多html页面开发框架五 开发环境配置 babel配置

    一.解决什么问题      1.开发环境js.css不压缩,可在浏览器选中代码调试      2.开发环境运行http服务指向打包后的文件夹      3.babel输出浏览器兼容的js代码 二.需要 ...

  5. 基于webpack实现多html页面开发框架三 图片等文件路径替换、并输出到打包目录

    一.解决什么问题      1.图片路径替换.并输出到打包目录      2.输出目录清理 二.需要安装的包 file-loader:html.css中图片路径替换,图片输出到打包目录:命令:npm ...

  6. 基于webpack实现多html页面开发框架七 引入第三方库如jquery

    一.解决什么问题 1.如何引入第三方库,如jquery等 二.引入jquery方法 1.下载jquery.min.js放到assets/lib下面 2.安装copy-webpack-plugin,将已 ...

  7. 基于webpack实现多html页面开发框架八 html引入图片打包和公共页面模块复用

    一.解决什么问题 1.html中img引入的图片地址没有被替换,找不到图片 2.html公共部分复用问题,如头部.底部.浮动层等 二.html中img引入图片问题解决 1.在index.html插入i ...

  8. 基于webpack和vue.js搭建开发环境

    前言 在对着产品高举中指怒发心中之愤后,真正能够解决问题的是自身上的改变,有句话说的好:你虽然改变不了全世界,但是你有机会改变你自己.秉承着“不听老人言,吃亏在眼前”的优良作风,我还是决定玩火自焚. ...

  9. 基于DDD的现代ASP.NET开发框架--ABP系列之3、ABP分层架构

    基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:ht ...

随机推荐

  1. 使用Typescript重构axios(十四)——实现拦截器

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  2. css3软键盘不盖住输入框的方法

    css3软键盘不盖住输入框的方法 弹出软键盘的时候 最外面的容器高度就发生了变化 要减去软键盘高度了<pre>var bodyheight bodyheight = $('body').h ...

  3. C# VII: 统计文本行数

    本文基于StackOverflow的以下问题收集整理而成. What is the fastest waty to count newlines in a large .NET string: htt ...

  4. [LC]237题 Delete Node in a Linked List (删除链表中的节点)(链表)

    ①中文题目 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 示例 1: 输入: hea ...

  5. 判断DataGridView是否选中某行

    if (this.Drawing_GridView.SelectedColumns.Count == 0)//判断是否选中某行 { }

  6. nyoj 206-矩形的个数 (a*b*(a+1)*(b+1)/4)

    206-矩形的个数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:16 提交数:37 难度:1 题目描述: 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1* ...

  7. PostGIS 报错为org.postgresql.util.PSQLException:错误: Operation on mixed SRID geometries

    说明: 在用Openlayers与Geoserver进行开发,做在线编辑功能时,出现一个问题:每当我新增了一根要素后,再次用wfs的方式进行点击查询时,会报错mixed SRID. 通过研究发现在数据 ...

  8. pdf 在线预览之 pdfobject插件

    支持到ie9 可以不用安装  如果安装 npm i pdfobject 第一步:引入pdfObject包 申明一个变量 const { PDFObject } = require("../. ...

  9. Docker (一) 安装 Oracle18c

    通过Docker 安装 Oracle18c 1.拉取 oracle18c 镜像 docker pull registry.cn-hangzhou.aliyuncs.com/zhengqing/orac ...

  10. HTTPS 原理分析——带着疑问层层深入

    HTTPS 随着 HTTPS 建站的成本下降,现在大部分的网站都已经开始用上 HTTPS 协议.大家都知道 HTTPS 比 HTTP 安全,也听说过与 HTTPS 协议相关的概念有 SSL .非对称加 ...