最近使用 vue 开发 h5 混合应用一年多了,总结了一套最佳实践模板,欢迎围观,希望能够帮到你 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mcuking
V2EX    Vue.js

最近使用 vue 开发 h5 混合应用一年多了,总结了一套最佳实践模板,欢迎围观,希望能够帮到你

  •  
  •   mcuking
    mcuking 2019-08-24 19:21:23 +08:00 7844 次点击
    这是一个创建于 2246 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用 vue 写了一年多的混合应用,期间遇到了不少坑和一些收获一直想总结下经验,能够帮助到别人,希望把这个库打造成一个很好用的 h5 写 app 的最佳实践模板,正在不断完善中,不过已经有很多干货了,欢迎围观提些意见

    https://github.com/mcuking/mobile-web-best-practice

    下面是库的内容目录:

    组件库
    JSBridge
    路由堆栈管理(模拟原生 APP 导航)
    请求数据缓存
    阻止原生返回事件
    检测页面环境
    样式适配
    表单校验
    打包策略
    微前端应用
    领域驱动设计应用
    mock 数据
    调试控制台
    抓包工具
    异常监控平台
    性能监控平台
    常见问题
    16 条回复    2019-08-26 10:55:43 +08:00
    viiii
        1
    viiii  
       2019-08-24 20:06:17 +08:00
    已经 star,支持一下
    jziwenchen
        2
    jziwenchen  
       2019-08-24 20:20:33 +08:00
    已 Star 支持分享!
    mcuking
        3
    mcuking  
    OP
       2019-08-24 20:24:37 +08:00
    感谢各位支持,项目刚刚启动,免不了有些点遗漏或某个点不是最佳方案,毕竟一个人力量有限,也欢迎大家能多提些意见或者更好的方案
    xiangyuecn
        4
    xiangyuecn  
       2019-08-24 21:01:31 +08:00
    华山论键,不如大宝剑

    demo 虽然只用到一个 native 调用,并且进行了一次封装,但太简陋了几乎等于没有封装。每次调用都要 platform !== 'browser',真丑。

    这些判断完全可以放到对底层进行实际调用的时候进行判断,简化使用者的逻辑。也利于跨平台,和底层接口版本的管理,不管底层是浏览器、ios、Android、还是小程序。

    那些兼容性的粗活、丑陋代码都放到 NativeMethods 进行集中,眼不见为净,最终要调用的时候比如那个唯一的 api:AnyMethods.syncCalendar(args, success, fail?, complete?),底层不支持直接走可选的 fail 逻辑
    mcuking
        5
    mcuking  
    OP
       2019-08-24 21:10:32 +08:00
    哈哈哈,好主意,写的时候也觉得放在业务里有点冗余,感谢建议,明天就加上
    fengxianqi
        6
    fengxianqi  
       2019-08-24 21:19:26 +08:00
    已 star
    mcuking
        7
    mcuking  
    OP
       2019-08-24 21:45:58 +08:00
    感谢资瓷
    henjihenguanjian
        8
    henjihenguanjian  
       2019-08-24 22:50:42 +08:00
    感谢分享,已 star
    mcuking
        9
    mcuking  
    OP
       2019-08-24 23:10:40 +08:00
    哈哈哈,这个库很多都是也是从开源社区学来的,现在算是对社区回馈吧,刚起步还有很多要完善的,多谢资瓷
    mcuking
        10
    mcuking  
    OP
       2019-08-25 09:33:18 +08:00
    @xiangyuecn 根据老哥的建议,我已经把调用 native 接口时检测平台的逻辑移入 NativeMethods 类,通过装饰器注入检测平台逻辑,代码如下:

    ```
    class NativeMethods {
    // 同步到日历
    @p()
    public syncCalendar(params: SyncCalendarParams) {
    ...
    }
    }

    /**
    * @param {platforms} - 接口限制的平台
    * @return {Function} - 装饰器
    */
    function p(platforms = ['android', 'ios']) {
    return (target: AnyObject, name: string, descriptor: PropertyDescriptor) => {
    if (!platforms.includes(window.$platform)) {
    descriptor.value = () => {
    return Vue.prototype.$toast(
    `当前处在 ${window.$platform} 环境,无法调用接口哦`
    );
    };
    }

    return descriptor;
    };
    }
    ```
    momowei
        11
    momowei  
       2019-08-25 09:45:40 +08:00
    混合开发用 cordova 也蛮简单和快速,很多原生插件直接用
    mcuking
        12
    mcuking  
    OP
       2019-08-25 09:53:16 +08:00
    哈哈哈,我们最开始调研时就选择了 cordova,确实不错,不过现在演变成了 react native + h5 混合模式,rn 主要负责即时通讯功能,h5 负责大部分业务,合同报销之类的。

    做的产品类似钉钉那种 oa 系统,不过只是我们自己公司用
    unicloud
        13
    unicloud  
       2019-08-25 10:33:41 +08:00 via iPhone
    还没有 star
    mcuking
        14
    mcuking  
    OP
       2019-08-25 11:59:58 +08:00
    @unicloud 相信我,这个库计划后面还会有更多干货的
    mcuking
        15
    mcuking  
    OP
       2019-08-25 20:01:48 +08:00
    顺便在这里问下,关于网页性能监控,特别是针对 webview 加载 h5 的情况,有没有比较好开源免费工具呢?

    这方面没什么实战经验,正好公司内也想要监控下 h5 的性能,比如首屏加载时间等等。有这方面的好东东还请留个言哦~
    mcuking
        16
    mcuking  
    OP
       2019-08-26 10:55:43 +08:00
    没人有这性能监控方面经验吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2592 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 09:51 PVG 17:51 LAX 02:51 JFK 05:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86