多页面webpack配置 基于webpack3.x的多页面配置(HtmlWebpackPlugin学习篇一 ——基础篇)
- 首先动态将entry配置出来,entry主要是js文件,得到的形式需要是
{
'pageA':'./src/js/pageA.js',
'pageB':'./src/js/pageB.js',
'pageC':'./src/js/pageC.js',
....
}
- 所以需要遍历你文件下的js和html,我期望能得到一个html和js一一对应的数组方便后续操作
文章图片
- 现在需要遍历pageA.js和pageB.js
webpack.config.js
里写方法
const glob = require('glob');
let chunks = [];
let getentries= function () {
var entryFiles = glob.sync('./src/**/*.js')
var map = {};
for (var i = 0;
i < entryFiles.length;
i++) {
var filePath = entryFiles[i];
var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'));
map[filename] = filePath;
//得到map={'pageA':'./src/js/pageA.js','pageB':'./src/js/pageB.js'}
chunks.push(filename)//chunks = ['pageA','pageB']
}
return map;
}
let entries = getentries();
configs.push({
entry: entries,
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist'),
},
...
})
- 接下来配置html和chunks的对应,构建htmlWebpackPlugin
let getHtml = function(){
let htmls= glob.sync('./src/*.html');
for(var i = 0;
i < htmls.length;
i++){
let conf = {
filename: chunks[i]+'.html', //生成的html存放路径,相对于path,例如pageA.html
template: htmls[i],// html模板路径
inject: 'body',
chunks: [entries[chunks[i]]]
};
if (process.env.NODE_ENV === 'production') {
conf.hash = true;
}
configs.plugin.push(new HtmlWebpackPlugin(conf));
}
}export default configs
- 简单动态配置entry就结束啦。
- 如果复杂一点的文件夹,例如
文章图片
一般取html下,可以用glob.sync('./src/html/**/**/*.js')
来遍历入口js,./src/html/**/**/*.html
遍历html - map[filename]的索引filename可以取例如
index/classify
,在配置output的时候也会自动生成文件夹下的html
const glob = require('glob');
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- vue.js|vue中使用axios封装成request使用
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- javascript|vue使用js-xlsx导出excel,可修改格子样式,例如背景颜色、字体大小、列宽等
- html5|各行业工资单出炉 IT类连续多年霸占“榜首”位置