基于vue cli重构多页面脚手架过程详解


Posted in Javascript onJanuary 23, 2018

官方提供的项目生成工具vue-cli没有对多页面webApp的支持,但是在实际的项目中,我们需要这样的脚手架,参考了很多大牛的方法,这里提供了一种我的单页面脚手架转换为多页面脚手架的方案,供大家参考。不好的地方也请大家指正。

准备

使用vue-cli生成一个你需要的单页面项目脚手架,然后我们就要开始我们的改装工程了。

重构过程

步骤一 改变目录结构

  • step1 在src目录下面新建views文件夹,然后再views文件夹下新建index文件夹
  • step2 将src目录下的main.js和App.vue移动到step1中的index文件夹下,并将main.js重命名为index.js
  • step3 将src目录下的router文件夹移动到step1中的index文件夹下,如果不使用router可以再index.js中注释掉,我没有使用,因为我的每个页面不是单页面的应用,不必要使用路由功能
  • step4 将根目录下的index.html文件移动到step1中的index文件夹下

步骤二 修改build下的配置文件

在生产环境下会分页面打包独有js文件,并抽取公共js,不会什么都打包成一坨。打包后文件目录结构也是比较清晰地。一下所有修改都在build文件夹下

step1 修改utils.js,增加两个函数,一个用来获取页面多入口,一个用来输入打包后的页面,并注入js:

var glob = require('glob')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var PAGE_PATH = path.resolve(__dirname, '../src/views')
var merge = require('webpack-merge')
//多入口配置
//获取views文件夹下,每个页面下的index.js作为页面入口,故每个页面下都必须有index.js
exports.entries = function() {
 var entryFiles = glob.sync(PAGE_PATH + '/*/index.js')
 var map = {}, tmp = [], pathname = '';
 entryFiles.forEach((filePath) => {
 var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
 tmp = filePath.split('/').splice(-4)
 map[tmp[2] + '/' + filename] = filePath
 })
 return map
}
//多页面输出配置
//读取views文件夹下的对应每个页面的html后缀文件,然后放入数组中
//如果想要更深的定制或者修改,建议大家看一下CommonsChunkPlugin
//推荐一个基础的 https://segmentfault.com/q/1010000009070061
exports.htmlPlugin = function() {
 let entryHtml = glob.sync(PAGE_PATH + '/*/*.html')
 let arr = []
 entryHtml.forEach((filePath) => {
 let jsPath = '', tmp = [];
 let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
 tmp = filePath.split('/').splice(-4)
 jsPath = tmp[2] + '/' + 'index'
 let conf = {
  template: filePath,
  filename: filename + '.html',
  chunks: ['manifest', 'vendors', jsPath],
  inject: true
 }
 if (process.env.NODE_ENV === 'production') {
  conf = merge(conf, {
  minify: {
   removeComments: true,
   collapseWhitespace: true,
   removeAttributeQuotes: true
  },
  chunksSortMode: 'dependency'
  })
 }
 arr.push(new HtmlWebpackPlugin(conf))
 })
 return arr
}
step2 修改webpack.base.conf.js文件配置的入口
// entry: {
// app: './src/main.js'
// },
entry: utils.entries(),
step3 修改webpack.dev.conf.js文件的打包方法 找到下面的代码,将其注释掉:
new HtmlWebpackPlugin({
 filename: 'index.html',
 template: 'index.html',
 inject: true
}),

在plugins这个属性值的后面加上我们上面的方法,下面是代码片段:

// new HtmlWebpackPlugin({
 // filename: 'index.html',
 // template: 'index.html',
 // inject: true
 // }),
 new FriendlyErrorsPlugin()
 ].concat(utils.htmlPlugin())
step4 修改webpack.prod.conf.js 找到下面的代码,注释掉:
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
minify: {
 removeComments: true,
 collapseWhitespace: true,
 removeAttributeQuotes: true
 // more options:
 // https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency'
}),

在plugins这个属性值的后面加上我们上面的方法,下面是代码片段:

new CopyWebpackPlugin([{
  from: path.resolve(__dirname, '../static'),
  to: config.build.assetsSubDirectory,
  ignore: ['.*']
 }])
 ].concat(utils.htmlPlugin())

配置完成。正常启动项目即可。

总结

以上所述是小编给大家介绍的基于vue cli重构多页面脚手架过程详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery使用each方法遍历json格式数据实例
May 18 Javascript
Jquery注册事件实现方法
May 18 Javascript
JavaScript驾驭网页-CSS与DOM
Mar 24 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
Jun 06 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
Dec 29 jQuery
react MPA 多页配置详解
Oct 18 Javascript
javascript自定义右键菜单插件
Dec 16 Javascript
JavaScript canvas绘制折线图
Feb 18 Javascript
我所理解的JavaScript中的this指向
Sep 04 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
Jan 23 #Javascript
实时监控input框,实现输入框与下拉框联动的实例
Jan 23 #Javascript
从parcel.js打包出错到选择nvm的全部过程
Jan 23 #Javascript
浅谈vue项目重构技术要点和总结
Jan 23 #Javascript
bootstrap fileinput插件实现预览上传照片功能
Jan 23 #Javascript
php 解压zip压缩包内容到指定目录的实例
Jan 23 #Javascript
three.js 入门案例详解
Jan 23 #Javascript
You might like
PHP面向对象编程快速入门
2006/10/09 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
总结python实现父类调用两种方法的不同
2017/01/15 Python
python WindowsError的错误代码详解
2017/07/23 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
Django分组聚合查询实例分享
2020/04/29 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
学院领导推荐信
2013/10/30 职场文书
村委会主任先进事迹
2014/01/15 职场文书
运动会入场解说词300字
2014/01/25 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
考察现实表现材料
2014/05/19 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
委托书怎样写
2014/08/30 职场文书
学前教育专业求职信
2014/09/02 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python