详解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 相关文章推荐
javascript 混合的构造函数和原型方式,动态原型方式
Dec 07 Javascript
往光标所在位置插入值的js代码
Sep 22 Javascript
百度判断手机终端并自动跳转js代码及使用实例
Jun 11 Javascript
jquery实现鼠标滑过小图时显示大图的方法
Jan 14 Javascript
js获取form的方法
May 06 Javascript
javascript验证邮件地址和MX记录的方法
Jun 16 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
May 12 Javascript
正则中的回溯定义与用法分析【JS与java实现】
Dec 27 Javascript
layui文件上传实现代码
May 20 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
Dec 07 Javascript
使用typescript构建Vue应用的实现
Aug 26 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
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
php格式化电话号码的方法
2015/04/24 PHP
php无限极分类实现方法分析
2019/07/04 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
javascript中的new使用
2010/03/20 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
python创建线程示例
2014/05/06 Python
python日志记录模块实例及改进
2017/02/12 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
Python使用configparser库读取配置文件
2020/02/22 Python
django和flask哪个值得研究学习
2020/07/31 Python
Python计算矩阵的和积的实例详解
2020/09/10 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
Python Django路径配置实现过程解析
2020/11/05 Python
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
生产部经理岗位职责
2013/12/16 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
给校长的建议书200字
2014/05/16 职场文书
竞聘自述材料
2014/08/25 职场文书
单身证明范本
2015/06/15 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
Django操作cookie的实现
2021/05/26 Python
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL