详解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 相关文章推荐
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
javascript解析json实例详解
Nov 05 Javascript
javascript中in运算符用法分析
Apr 28 Javascript
javascript实现带下拉子菜单的导航菜单效果
May 14 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
May 03 Javascript
js添加事件的通用方法推荐
May 15 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 Javascript
解决select2在bootstrap modal中不能正常使用的问题
Aug 09 Javascript
layDate日期控件使用方法详解
Nov 15 Javascript
小程序hover-class点击态效果实现
Feb 26 Javascript
利用原生JavaScript实现造日历轮子实例代码
May 08 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
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
javascript动画效果类封装代码
2007/08/28 Javascript
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
Python之list对应元素求和的方法
2018/06/28 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
Python和Sublime整合过程图示
2019/12/25 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
什么是URL
2015/12/13 面试题
群众路线教育党员自我剖析材料
2014/10/06 职场文书
2014年采购工作总结
2014/11/20 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书