vue将单页面改造成多页面应用的方法


Posted in Javascript onNovember 25, 2018

问题描述: 手头有一个项目是使用 vue-cli 搭建的单页面应用。项目分为了管理平台和用户查看页面,用户查看页面是很简单的页面,但是在加载过程中,却加载了整个应用的打包代码,量重且影响了响应和体验。我想要的效果是,查看页面只加载查看页面的代码,不包含管理系统的代码,因此着手将单页面应用改造成多页面应用,这里分享下方法。

1、改造文件目录

改造前:

vue将单页面改造成多页面应用的方法

改造后:

vue将单页面改造成多页面应用的方法

assets:这里不变,依然放置公用的静态资源文件;components:这里存放应用下所有的vue组件;pages:这里存放我们的多页面,比如我把管理系统页面放在index中,查看页面放在view中;

pages文件:

vue将单页面改造成多页面应用的方法

每个页面下必须包含的文件是 html/js/vue,是文件入口,如果该页面下包含路由,状态管理,接口请求也放在该目录下;

2、打包配置文件修改

我们最后的打包文件是这样的,可以看到有2个html,包括资源也分开了。这是通过修改webpack配置改造的。采用的方法也是网上比较推荐的方法.
HTML分离:
vue将单页面改造成多页面应用的方法

资源分离:
vue将单页面改造成多页面应用的方法

2.1 修改build->utils.js

修改build文件夹下的utils.js,直接将下面的代码复制在后面即可。

var glob = require('glob');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var PAGE_PATH = path.resolve(__dirname, '../src/pages');
var merge = require('webpack-merge');
// 这段代码的意思是根据我们`pages`下的文件夹定义webpack的入口:
exports.entries = function () {
 var entryFiles = glob.sync(PAGE_PATH + '/*/*.js')
 var map = {}
 entryFiles.forEach((filePath) => {
   var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
   map[filename] = filePath
 })
 return map
}
// 这段代码是将生成的html,加载对应的资源文件
exports.htmlPlugin = function () {
 let entryHtml = glob.sync(PAGE_PATH + '/*/*.html')
 let arr = []
 entryHtml.forEach((filePath) => {
   let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
   let conf = {
     // 模板来源
     template: filePath,
     // 文件名称
     filename: filename + '.html',
     // 页面模板需要加对应的js脚本,如果不加这行则每个页面都会引入所有的js脚本
     chunks: ['manifest', 'vendor', filename],
     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
}

2.2 修改入口entry打开 build->webpack.base.conf.js,替换entry为在utils新增的entries

vue将单页面改造成多页面应用的方法

2.3 修改html插件打开build->webpack.prod.conf.js,先去除原来的配置:

vue将单页面改造成多页面应用的方法

然后再把我们刚在utils里新增的配置加上:

vue将单页面改造成多页面应用的方法

3、页面怎么写

上面的方法,网上五花八门的都介绍了,但是在实现的过程中,还是遇到了问题:这里粘贴下我实践成功的页面写法,减少一些爬坑吧~

view.html

vue将单页面改造成多页面应用的方法

view.vue

vue将单页面改造成多页面应用的方法

view.js

vue将单页面改造成多页面应用的方法

ok,这时候 npm run build 就可以打包出我们要的文件了,访问方法是直接输入对应的html,如果是管理首页,无需写index.html,比如本地访问查看页面:

vue将单页面改造成多页面应用的方法

4、进一步优化

这个时候我们又发现一个问题,就是我的查看页面很简单,没有引入状态管理,路由,UI框架,但是我们知道vue的webpack把这些第三方公共组件都打包到render.js里面了且文件很大会影响我们的加载速度。这里我是将比较大的第三方库使用了cdn方法加载,实践证明会减少了一半的加载速度,且压缩后的js代码也小了很多了~

Javascript 相关文章推荐
键盘 keycode的值 javascript时触发事件时很有用的要素
Nov 02 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
Apr 10 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
Sep 10 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
May 16 Javascript
BootStrap3使用错误记录及解决办法
Dec 22 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
微信小程序实现流程进度的图样式功能
Jan 16 Javascript
js根据json数据中的某一个属性来给数据分组的方法
Oct 08 Javascript
JavaScript解析JSON数据示例
Jul 16 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
Sep 14 Javascript
Element PageHeader页头的使用方法
Jul 26 Javascript
vue下拉菜单组件(含搜索)的实现代码
Nov 25 #Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
Nov 25 #Javascript
详解Vue CLI 3.0脚手架如何mock数据
Nov 23 #Javascript
详解js静态检查工具eslint配置文件
Nov 23 #Javascript
详解小程序不同页面之间通讯的解决方案
Nov 23 #Javascript
创建echart多个联动的示例代码
Nov 23 #Javascript
详解Angular模板引用变量及其作用域
Nov 23 #Javascript
You might like
生成静态页面的PHP类
2006/07/15 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
浅谈php的优缺点
2015/07/14 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
javascript smipleChart 简单图标类
2011/01/12 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
JS常用知识点整理
2017/01/21 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
python实现代理服务功能实例
2013/11/15 Python
Python中optparse模块使用浅析
2015/01/01 Python
详解Python3中yield生成器的用法
2015/08/20 Python
python里使用正则的findall函数的实例详解
2017/10/19 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python实现单向链表详解
2018/02/08 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
Pycharm调试程序技巧小结
2020/08/08 Python
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
小型女装店的创业计划书
2014/01/09 职场文书
化妆品活动策划方案
2014/05/23 职场文书
校长师德表现自我评价
2015/03/04 职场文书
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL