详解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 相关文章推荐
JQuery优缺点分析说明
Apr 10 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
Aug 10 Javascript
js实现的光标位置工具函数示例
Oct 03 Javascript
JS禁止查看网页源代码的实现方法
Oct 12 Javascript
w3c编程挑战_初级脚本算法实战篇
Jun 23 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
Jul 03 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
Apr 26 jQuery
Vue实现本地购物车功能
Dec 05 Javascript
js继承的这6种方式!(上)
Apr 23 Javascript
使用Layui搭建后台管理界面的操作方法
Sep 20 Javascript
JavaScript高级程序设计之变量与作用域
Nov 17 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
linux iconv方法的使用
2011/10/01 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
php分页查询的简单实现代码
2017/03/14 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
bootstrap fileinput完整实例分享
2016/11/08 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
python获取目录下所有文件的方法
2015/06/01 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
解决Django no such table: django_session的问题
2020/04/07 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
实例代码讲解Python 线程池
2020/08/24 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
物流毕业生个人的自我评价
2014/02/13 职场文书
房屋转让协议书范本
2014/04/11 职场文书
学生上课说话检讨书
2014/10/25 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
关于法制教育的宣传语
2015/07/13 职场文书