基于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 相关文章推荐
MooTools 1.2中的Drag.Move来实现拖放
Sep 15 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
May 31 Javascript
javascript 函数及作用域总结介绍
Nov 12 Javascript
防止按钮在短时间内被多次点击的方法
Mar 10 Javascript
js防止DIV布局滚动时闪动的解决方法
Oct 30 Javascript
jQuery实现多按钮单击变色
Nov 27 Javascript
javascript实现密码强度显示
Mar 18 Javascript
JavaScript 匿名函数和闭包介绍
Apr 13 Javascript
jQuery中$.each()函数的用法引申实例
May 12 Javascript
JS调用某段SQL语句的方法
Oct 20 Javascript
Vue.extend实现挂载到实例上的方法
May 01 Javascript
vue实现登陆页面开发实践
May 30 Vue.js
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 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
php查询ip所在地的方法
2014/12/05 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
[01:05:29]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第二场 1月24日
2021/03/11 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
Django中的Model操作表的实现
2018/07/24 Python
python散点图实例之随机漫步
2018/08/27 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Python之循环结构
2019/01/15 Python
python Django的web开发实例(入门)
2019/07/31 Python
Python如何实现线程间通信
2020/07/30 Python
Django websocket原理及功能实现代码
2020/11/14 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
安全生产汇报材料
2014/02/17 职场文书
银行内勤岗位职责
2014/04/09 职场文书
护士感人事迹
2014/05/01 职场文书
企业总经理任命书
2014/06/05 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
商超业务员岗位职责
2015/02/13 职场文书
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android