详解webpack多入口配置与自动构建
本文详细解析如何在Vue项目中配置Webpack多入口。通过对比单入口与多入口结构,演示如何修改webpack.base.conf.js和webpack.dev.conf.js。重点介绍利用glob模块自动扫描视图文件,动态生成HtmlWebpackPlugin配置,实现HTML与JS入口的自动匹配,提升多页面应用的开发效率。
Vue项目初始化与单入口配置
在同事搭建Vue项目时,个人推荐使用Vue官网推荐的vue-cli方式,参考文档地址为http://cn.vuejs.org/guide/application.html。
按照官网指引,我们可以使用npm run dev进行本地测试。首先需要理解,Webpack打包的核心对象是JS文件。查看生成的基础配置可知,首页入口对应index.html,模板同样使用index.html,而JS入口文件指定为main.js。

//file build/webpack.base.conf.js
//entry 配置
module.exports = {
entry: {
app: './src/main.js'
},
//....
//file build/webpack.dev.conf.js
//html配置
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true
})
多入口目录结构调整
上述目录结构无法满足多入口的需求。我们的目标是:HTML文件统一存放在views文件夹下,相关的业务Vue组件也集中存放,形成如下所示的结构。

手动配置多入口示例
首先对配置进行简单调整,以适应当前的项目结构,随后从中寻找规律,最终实现配置的自动化(以index.html为例)。
//file build/webpack.base.conf.js
//entry 配置
module.exports = {
entry: {
'index': './src/view/index/index.js',
'login': './src/view/login/login.js',
},
//....
//file build/webpack.dev.conf.js
//html配置,index我们保留了根目录访问路径
new HtmlWebpackPlugin({
filename: 'index.html',
template: './src/view/index/index.html',
inject: true,
chunks: ['index']
}),
new HtmlWebpackPlugin({
filename: 'login/login.html', //http访问路径
template: './src/view/login/login.html', //实际文件路径
inject: true,
chunks: ['login']
})
基于Glob的自动配置实现
规律显现后,只要保持JS与HTML的对应关系,即可通过文件扫描实现统一配置。
var glob = require('glob')
function getEntry(globPath, pathDir) {
var files = glob.sync(globPath);
var entries = {},
entry, dirname, basename, pathname, extname;
for (var i = 0; i < files.length; i++) {
entry = files[i];
dirname = path.dirname(entry);
extname = path.extname(entry);
basename = path.basename(entry, extname);
pathname = path.join(dirname, basename);
pathname = pathDir ? pathname.replace(pathDir, '') : pathname;
console.log(2, pathname, entry);
entries[pathname] = './' + entry;
}
return entries;
}
//我们的key不是简单用的上一个代码的index,login而是用的index/index,login/login因为考虑在login目录下面还有register
//文件路径的\\和/跟操作系统也有关系,需要注意
var htmls = getEntry('./src/view/**/*.html', 'src\\view\\');
var entries = {};
var HtmlPlugin = [];
for (var key in htmls) {
entries[key] = htmls[key].replace('.html', '.js')
HtmlPlugin.push(new HtmlWebpackPlugin({
filename: (key == 'index\\index' ? 'index.html' : key + '.html'),
template: htmls[key],
inject: true,
chunks: [key]
}))
}
至此,多入口配置基本完成。此外,若项目涉及异步加载(如require.ensure),还需配置公共JS提取,将相关代码放入单独目录并按上述逻辑进行匹配。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
Vue前端日历插件VCalendar集成与使用指南
2026-10-31 18:16:55
uniapp scroll-view 组件实战:Vue3 改造与滚动逻辑详解
2026-10-31 14:49:47
ElementUI el-calendar 周月视图切换与自定义实现
2026-10-31 14:48:43
Vue Element UI 结合 sortable.js 实现嵌套表格行内拖拽排序
2026-10-31 13:57:34
el-input 限制输入只允许输入浮点型的解决思路
2026-10-31 12:30:12








