能点进来的,确定是对单入口了解透彻,对Vue2了解的人了。
话很少说。上干货。html
1.一个完成能运行的Vue单页项目.(本文以Vue提供的单页模板为例子)
2.若没有,请找度娘。webpack
个人src目录有修改,以下:web
本例要修改的配置文件以下:npm
修改以下:数组
代码以下:
在config/index.js中添加两个字段。
view:是方全部页面的文件夹名称
defaultEntry:存有两个属性,是主页面的html和js的路径(个人主页js入口和html不在同一个文件夹下,这里配一下)浏览器
//多入口配置 entryPath:['view'], defaultEntry:{ html:'index', js:'./src/index' },
修改以下:
代码以下:ui
//获取多级入口 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; }
以下:spa
代码:3d
//多入口配置添加 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)
以下:code
代码:
//多入口配置添加 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)
修改以下:
代码:
//多入口配置添加 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/ (主页)