基于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 相关文章推荐
onmouseover和onmouseout的一些问题思考
Aug 14 Javascript
jQuery实现下拉框左右选择的简单实例
Feb 22 Javascript
回车直接实现点击某按钮的效果即触发单击事件
Feb 27 Javascript
js交换排序 冒泡排序算法(Javascript版)
Oct 04 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
javascript实现控制的多级下拉菜单
Jul 05 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
浅谈vue-cli 3.0.x 初体验
Apr 11 Javascript
JAVA面试题 static关键字详解
Jul 16 Javascript
VUE实现图片验证码功能
Nov 18 Javascript
Vant picker 多级联动操作
Nov 02 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
xajax写的留言本
2006/11/25 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
php数组去重复数据示例
2014/02/25 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
Python字典操作简明总结
2015/04/13 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
Python利用ansible分发处理任务
2015/08/04 Python
深入理解Python装饰器
2016/07/27 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
技能比赛获奖感言
2014/02/14 职场文书
股东合作协议书
2014/09/12 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
初中地理教学反思
2016/02/19 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang
Python获取字典中某个key的value
2022/04/13 Python