基于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 相关文章推荐
Javascript 同时提交多个Web表单的方法
Feb 19 Javascript
JavaScript语言核心数据类型和变量使用介绍
Aug 23 Javascript
JS 实现列表与多选框选择附预览动画
Oct 29 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
Mar 18 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
May 18 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
Oct 10 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
JavaScript实现求最大公共子串的方法
Feb 03 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
Jun 05 jQuery
微信小程序自定义组件封装及父子间组件传值的方法
Aug 28 Javascript
基于layui table返回的值的多级嵌套的解决方法
Sep 19 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
Jul 27 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
javascript天然的迭代器
2010/10/29 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
python中反射用法实例
2015/03/27 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
中专毕业生的自我鉴定
2013/12/01 职场文书
工作失职检讨书范文
2014/01/16 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
文员岗位职责范本
2014/03/08 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
创先争优个人承诺书
2014/08/30 职场文书
万里长城导游词
2015/01/30 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers