能点进来的,肯定是对单入口了解透彻,对Vue2了解的人了。
话不多说。上干货。
前期准备
1.一个完成能运行的Vue单页项目.(本文以Vue提供的单页模板为例子)
2.若没有,请找度娘。
目录
我的src目录有修改,如下:
本例要修改的配置文件如下:
config/index.js修改
修改如下:
代码如下:
在config/index.js中添加两个字段。
view:是方所有页面的文件夹名称
defaultEntry:存有两个属性,是主页面的html和js的路径(我的主页js入口和html不在同一个文件夹下,这里配一下)
//多入口配置
entryPath:['view'],
defaultEntry:{
html:'index',
js:'./src/index'
},
utils.js修改
修改如下:
代码如下:
//获取多级入口
let glob = require('glob')
exports.getMultiEntry = function (globPath,type) {
let entries = {}, basename, tmp, pathname;
glob.sync(globPath).forEach(function (entry) {
basename = path.basename(entry, path.extname(entry));
tmp = entry.split('/').splice(-4);
let pathSrc=tmp[0]+'/'+tmp[1]
if(tmp[0]==='src'){
pathSrc=tmp[2]
}
pathname = pathSrc+'/'+basename; // 正确输出js和html的路径
entries[pathname] = entry;
});
if(config.defaultEntry&&config.defaultEntry!==''){
entries['index']=config.defaultEntry[type]+'.'+type
}
console.log('entries-----------', entries);
return entries;
}
webpack.base.conf.js修改
如下:
代码:
//多入口配置添加
let entries={}
for(let i=0;i<config.entryPath.length;i++){
let tempEntry= utils.getMultiEntry('./src/'+config.entryPath[i]+'/**/*.js','js'); // 获得入口js文件
entries=Object.assign(entries,tempEntry)
}
const chunks = Object.keys(entries)
webpack.dev.conf.js
如下:
代码:
//多入口配置添加
let htmlPages = {}
for (let i = 0; i < config.entryPath.length; i++) {
let tempHtml = utils.getMultiEntry('./src/' + config.entryPath[i] + '/**/*.html', 'html') // 获得入口js文件
htmlPages = Object.assign(htmlPages, tempHtml);
}
let pagesConfig = []
for (let pagename in htmlPages) {
const pageCon = {
filename: pagename+'.html',
template: htmlPages[pagename],
chunks: [pagename, 'vendors', 'manifest'], // 每个html引用的js模块, 由此看出html和js名字要相同
inject: true
}
pagesConfig.push(new HtmlWebpackPlugin(pageCon))
}
注意,别忘了隐藏源文件的new HtmlWebpackPlugin一段代码。
在plugins数组后面接上一句:.concat(pagesConfig)
webpack.prod.conf.js修改
修改如下:
代码:
//多入口配置添加
let htmlPages = {}
for (let i = 0; i < config.entryPath.length; i++) {
let tempHtml = utils.getMultiEntry('./src/' + config.entryPath[i] + '/**/*.html', 'html') // 获得入口html文件
htmlPages = Object.assign(htmlPages, tempHtml);
}
console.log(htmlPages)
for (let pagename in htmlPages) {
const pageCon = {
filename: pagename +'.html',
template: htmlPages[pagename],// 模板路径
inject: true,// js插入位置
chunks: ["vendor", "manifest",pagename],// 每个html引用的js模块,也可以在这里加上vendor等公用模块
chunksSortMode: 'dependency',
hash:true
}
console.log(pageCon)
webpackConfig.plugins.push(new HtmlWebpackPlugin(pageCon))
}
别忘了隐藏这段代码:
好啦完成了
npm run build
npm run dev
进入浏览器打开地址
http://localhost:8080/first (first页面)
http://localhost:8080/first/#/login (first页面子路由1)
http://localhost:8080/first/#/regist (first页面子路由2)
http://localhost:8080/second (second页面)
http://localhost:8080/ (主页)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。