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 相关文章推荐
免费空间广告万能消除代码
Sep 04 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
Nov 26 Javascript
非阻塞动态加载javascript广告实现代码
Nov 17 Javascript
javascript学习笔记(五)正则表达式
Apr 08 Javascript
自定义jQuery选项卡插件实例
Mar 27 Javascript
js获取控件位置以及不同浏览器中的差别介绍
Aug 08 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
Jan 13 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
javascript设计模式之策略模式学习笔记
Feb 15 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
May 08 jQuery
详解webpack import()动态加载模块踩坑
Jul 17 Javascript
实现高性能javascript的注意事项
May 27 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中串行化用法示例
2016/11/16 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
JavaScript 特殊字符
2007/04/05 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
Python中的字符串类型基本知识学习教程
2016/02/04 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
python字符串常用方法
2018/06/14 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
python把转列表为集合的方法
2019/06/28 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
Linux开机引导的步骤是什么
2014/02/26 面试题
平面设计师的工作职责
2013/11/21 职场文书
个人简历自我评价
2014/02/02 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
律师授权委托书范本
2014/10/07 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
Python如何使用循环结构和分支结构
2022/04/13 Python