详解vue移动端项目代码拆分记录


Posted in Javascript onMarch 15, 2019

撸一套vue多端共用,非常适合需要快速且全面上线的项目。但是多端共用一套vue代码,由于平台间的互相限制,每端在某些业务例如支付分享等是完全独立的代码,每个平台的支付方式也会有所差异,造成在这些业务的实现过程中会有太冗余的“if else”判断。所以为了提高代码的复用性、扩展性,可以将代码拆分,以-小程序和App两端举例,一份部署到小程序,一份部署到App(Android&Ios)。

首先代码拆分应该保证本地开发的时候只有一套代码,提取所有公共页面,并且分别提取小程序和app的独立JS方法,避免开发完小程序端vue,然后粘贴复制到App端的繁琐操作。
直接看图最清晰,拆分前目录结构:

拆分后目录结构:

详解vue移动端项目代码拆分记录

拆分前项目目录结构

详解vue移动端项目代码拆分记录

拆分后项目目录结构

目录拆分好之后,开始拆分代码。由于部署到生产环境的时候只能App端部署App端,小程序端部署小程序端,那么在本地开发过程中为了调试不同端的页面就需要进行路由配置,所以对路由配置文件route.list.js做了修改:
拆分代码前,route.list.js中将所有页面JS文件的相对路径放在一个数组里:

define(
 [
  ‘../xxx/xxx/user.js',
  ‘../xxx/xxx/goods.js',
  …
  …
 ]
)

拆分后,route.list.js中按public、mobile_app、wechat_mini 分别定义数组,这样如果现在正在开发小程序端的vue,那么则将public和wechat_mini的数组合并到一起,开发app端的vue则将public和moblie_app的数组合并到一起,合并数组使用ES6扩展运算符(…)。

var public_goods = [];
var mini_goods = [];
var app_goods = [];
var fun = (isWechatMini) => {
  if(isWechatMini){
    return [
     …public_goods,
     …mini_goods
    ]
  } else {
    return [
     …public_goods,
     …app_goods
    ]
  }
}
define(
  fun(true)
)

将公共部分和独立部分的页面拆分之后,进一步分析代码:App端和小程序端相互独立的大多是支付功能,分享功能等涉及到需要原生处理的地方,并且会在多个页面,多个业务中出现,那么就将App独立的vue代码拆分到一个公共JS中(app-common.js),将小程序独立的vue代码拆分到一个公共JS中(mini-common.js),在需要的页面中引入即可。就商品购买支付功能为例:

拆分前:

define([‘vue', ‘axios', ‘text!/File/Html/goods/goodsPay.html'], (vue, axios, Template) => {
  var App = {
   data() {

   },
   template: Template,
   mounted() {

   },
   methods: {
     pay(){
       if(isWechatMini){
         //这里是小程序支付
       } else {
         //这里是App支付
       }
     }
   }
  };

  return{
    app: App
  };
  
});

业务复杂的情况下,会有多层if else,代码太冗余。

拆分后:

小程序端的商品支付购买页面:

define([‘vue', ‘axios', ‘text!/File/Html/mini/goods/goodsPay.html', ‘mini-common'], (vue, axios, Template, common) => {
  var App = {
    data() {

    },
  template: Template,
  mounted() {

  },
  methods: {
     pay(){
       //调用mini-common中定义的支付方法
       common.pay();
     }
  }
 };

 return{
  app: App
 };
  
});

App端的商品购买支付页面只需要将引入的JS换成app-common即可:

define([‘vue', ‘axios', ‘text!/File/Html/app/goods/goodsPay.html', ‘app-common'], (vue, axios, Template, common) => {
  var App = {
    data() {
    },
  template: Template,
  mounted() {

  },
  methods: {
    pay(){
      //调用app-common中定义的支付方法
      common.pay();
    }
   }
  };
  return{
   app: App
  };
  
});

本地开发完后,部署到服务器只需要将public目录下和wechat_mini下的文件复制粘贴到打包工具打包即是小程序端的代码,public和mobile_app打包即是app端的代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS实现关键字搜索时的相关下拉字段效果
Aug 05 Javascript
JQuery页面地址处理插件jqURL详解
May 03 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
May 07 Javascript
JavaSacript中charCodeAt()方法的使用详解
Jun 05 Javascript
莱鸟介绍javascript onclick事件
Jan 06 Javascript
JS实现上下左右对称的九九乘法表
Feb 22 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
Apr 20 Javascript
用js实现放大镜的效果的简单实例
May 23 Javascript
JS模态窗口返回值兼容问题的完美解决方法
May 28 Javascript
AngularJS实用开发技巧(推荐)
Jul 13 Javascript
js实现登录验证码
Dec 22 Javascript
在Vue中如何使用Cookie操作实例
Jul 27 Javascript
小程序自定义单页面、全局导航栏的实现代码
Mar 15 #Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 #Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
Mar 15 #Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
Mar 15 #Javascript
浅谈KOA2 Restful方式路由初探
Mar 14 #Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
Mar 14 #Javascript
详解React项目中碰到的IE问题
Mar 14 #Javascript
You might like
用PHP实现Ftp用户的在线管理的代码
2007/03/06 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
canvas时钟效果
2017/02/16 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
Python常见字典内建函数用法示例
2018/05/14 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
汽车专业人才自我鉴定范文
2013/12/29 职场文书
中国梦的演讲稿
2014/01/08 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
swagger如何返回map字段注释
2021/07/03 Java/Android