详解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 相关文章推荐
常用Extjs工具:Extjs.util.Format使用方法
Mar 22 Javascript
Node.js中创建和管理外部进程详解
Aug 16 Javascript
JavaScript的内存释放问题详解
Jan 21 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
C#中使用迭代器处理等待任务
Jul 13 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
Javascript数组中push方法用法分析
Oct 31 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
Sep 18 Javascript
微信小程序实现换肤功能
Mar 14 Javascript
p5.js实现故宫橘猫赏秋图动画
Oct 23 Javascript
vue之延时刷新实例
Nov 14 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PHP7 新增功能
2021/03/09 PHP
一端时间轮换的广告
2006/06/26 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
详解Python装饰器由浅入深
2016/12/09 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
python matplotlib库的基本使用
2020/09/23 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
大专学生推荐信范文
2013/11/19 职场文书
办公室副主任岗位职责
2013/11/25 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
家长评语和期望
2014/02/10 职场文书
总账会计岗位职责
2014/03/13 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
支行行长竞聘报告
2014/11/06 职场文书
公司经营目标责任书
2015/01/29 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers