github传送门:
1、h5主项目
2、项目脚手架
3、子项目模板

系列文章传送门:
vue简易微前端项目搭建(一):项目背景及简介
vue简易微前端项目搭建(二):子项目模板及项目脚手架搭建
vue简易微前端项目搭建(三):webpack相关配置


最近有空,准备写个系列教程,把公司目前在用的h5项目从搭建到实践优化的一些心得和经验记录一下,技术栈是vue2.x的,马上3.0正式版就要出了,再不写就要过时啦哈哈。

1、项目需求

我司h5主要做移动端,运行在app和小程序里,也就是hybrid app混合开发模式。

刚来公司时,公司h5才刚开始起步,同事只开发了三个h5需求,这三个需求在业务功能上都是相互独立的,所以也分开放在了三个spa项目里。。。想一想,以后开发类似需求越来越多,页面功能比较分散,大多都是相对独立的模块,难道要写n个项目吗,所以有必要设计一个多项目聚合方案。

2、关于微前端

我感觉今年随着qiankun2.0的发布,微前端概念突然火了很多,我记得去年也就是19年的时候还没那么火呢,不过确实是未来前端发展的一个方向。

在前公司的时候,有配合过后端做过微服务迁移的过程,对后端的微服务有一定的了解,后端一般是把接口划分为一些模块,每个模块就是一个微服务粒度,比如user、goods,每个模块都可以单独启动、单独修改发布。

而微前端也是借鉴后端的微服务化,把前端根据功能划分成几个相对独立的子项目,可以单独编译发布。

关于技术栈无关,个人认为对微前端来说是很有用的,但不是必需的,技术栈无关适用于把已有的几个老项目整合一起组成微前端,而如果是在微前端项目的立项搭建时就显得没那么重要了,因为搭建项目时选择统一的技术栈无论是开发维护还是代码复用都更方便且实际。

微前端也是前端技术发展过程中借鉴微服务后慢慢形成的一种架构思想,架构本身就是服务于业务而千变万化的,所以不必咬文嚼字去定义微前端必须具备哪些点。

本项目,只适用于vue技术栈,可以说是简易的微前端项目,也可以说是基于vue的多项目聚合方案。

3、关于本项目架构思路

技术栈选择呢,由于之前已做需求都是vue写的,也对vue相对更加熟悉,所以就选定vue作为基础框架,也便于项目搭建完成后把之前项目迁移进来,也是借鉴了前公司的方式。

整体上是基于vue-cli4生成的项目进行改造搭建,根据业务划分为多个不同的子项目,

(1)目录结构:

  ├── build                             // webpack相关配置├── src                               // 核心源代码│   ├── projects                      // 存储所有子项目│   │   ├── demo                      // 子项目目录名│   │   │   ├── components            // 子项目公共组件│   │   │   ├── static                // 不打包的js目录│   │   │   ├── store                 // vuex存储│   │   │   ├── utils                 // 公共js│   │   │   │   ├── importVant.js     // vant按需引入│   │   │   │   └── routerGuards.js   // 路由导航守卫│   │   │   ├── views                 // 页面源码│   │   │   ├── config.js             // 子项目配置文件│   │   │   └── main.js               // 子项目入口文件│   │   └── ......                    // 其他子项目│   ├── resources                     // 存储全局公共资源│   │   ├── assets                    // 全局公共图片等│   │   ├── components                // 全局公共组件│   │   ├── mixins                    // 全局mixins混入│   │   ├── styles                    // 全局公共样式│   │   ├── native                    // 原生客户端交互封装│   │   │   ├── callNative.js         // 调用客户端方法│   │   │   ├── openNative.js         // 跳转客户端页面│   │   │   ├── regNative.js          // 注册js方法给客户端│   │   ├── utils                     // 全局公共js│   │   │   ├── flexible.js           // rem适配│   │   │   ├── globalGuards.js       // 全局路由导航守卫公共方法│   │   │   ├── polyfill.js           // 手动添加的polyfill降级方法│   │   │   └── request               // 全局接口请求相关├── .env                              // 全局环境配置├── .env.beta                         // beta环境配置├── .env.dev                          // 本地环境配置├── .env.prod                         // 线上环境配置├── .env.test                         // test环境配置

(2)简述:

  • src目录包含projects和resources两个文件夹:
  • resources存放公共资源文件,
  • projects存放所有子项目,里面每个文件夹就是一个子项目,每个子项目相互独立,可以单独运行及打包。
  • 部署到线上时,也是每个子项目隶属于不同的目录路径,例如子项目a是https://test.com/a/index.html,子项目b是https://test.com/b/index.html。

这样,不同的业务需求可以通过创建不同的子项目来开发,resources里有公共资源方法可以共用,例如公共样式、公共方法、客户端交互等等。

(3)优势:

  • 1、利于多人多项目并行开发。在业务需求繁多、开发人员较多的时候,很多需求就需要并行开发,一个需求分配几个开发人员组成一个临时项目组,并行独立进行开发和上线,这样就可以通过在不同的子项目下开发而互不影响,同时也能方便使用公共资源和组件,保证并行开发的效率。
  • 2、利于发布上线时的风险分散。子项目可以单独发布,即使代码修改有严重bug,发布后也只会影响这次发布的子项目,未发布的也就是之前已通过测试上线的可以照常运行。
  • 3、提升页面访问速度和开发构建速度。相比于一整个大项目的方式,单个子项目使用webpack启动和构建的速度肯定更快;而且单个子项目使用的依赖包更少,意味着打包后的js文件更小,页面初次访问速度就会更快。当然,在不同子项目页面之间来回访问的速度相对会慢不少,但由于此hybrid h5项目的特殊性,绝大多数需求模块相对独立,互相跳转的场景很少,合理的划分子项目即可,而且hybrid h5里很多场景下新开一个webview打开页面的体验更好,这样还是得重新加载页面。

(4)对比MPA

  • 这里说的MPA是指单页面spa和传统多个html形式混合后的一种方式,在webpack的entry里配置多个入口实现,在项目启动和打包时都是一起构建的。
  • 这种方式对比上述的三点优势,其实就只是第3点的提升页面访问速度算是一致,其他优势点都不具备。
  • 个人理解MPA的主要应用场景是提升首屏访问速度。即把首屏页面单独划分出来,这样首屏部分打包后的js等代码就少很多,访问速度自然有所提升,特别是其他页面引入了很多第三方依赖的情况。而页面的懒加载只是路由的懒加载,未配置chunk分离的依赖打包后仍然会在初始页面里加载,没有MPA方式解决的更彻底。

4、项目配套

由于项目的运行及打包需要指定选择一个子项目,子项目会随着业务的发展越来越多,不可能都在package.json的script里写上固定的命令吧,为了提高命令使用效率,就做了个配套的脚手架工具,使用nodejs编写,主要用于创建子项目、子项目启动、打包等命令,可以自定义输入命令来指定子项目名和服务端环境。

同时也创建了个子项目模板,便于快速生成一个子项目,以及做子项目使用引导。

github地址见文章开头,业务相关代码已做清理。

5、子项目划分

这个就见仁见智了,具体还是根据公司业务需要来考虑,不用分太多,不然子项目太多管理也不方便,路由懒加载下其实一个子项目里多放些页面也没关系。

  • 比如一些简单的独立的页面(例如用户协议、app下载页什么的)可以都放到一个子项目里
  • 再比如一些有时效性的活动页也可以放到一起,比如中秋活动页、双十一活动页什么的,也可以按年份归纳,比如命名activity2020,2020年的活动页都放这里。

vue简易微前端项目搭建(一):项目背景及简介相关推荐

  1. vue简易微前端项目搭建(二):子项目模板及项目脚手架搭建

    github传送门: 1.h5主项目 2.项目脚手架 3.子项目模板 系列文章传送门: vue简易微前端项目搭建(一):项目背景及简介 vue简易微前端项目搭建(二):子项目模板及项目脚手架搭建 vu ...

  2. 基于微前端的大型中台项目融合方案

    点击上方"程序员成长指北"关注 关于微前端是什么,以及微前端落地方案,社区遍地都是,本篇文章不会再赘述这些基础知识.当然如果你没了解过上述知识,也可以直接读下这篇文章,足够浅显易懂 ...

  3. 基于Vue实现微前端

    基于Vue实现微前端 前言 痛点 方案 iframe嵌入 原生html嵌入 模块化嵌入    前端微服务化一直是前端社区的一个热门话题,早在2018年就有不少开发者提出过各种解决方案.或许是未得精髓, ...

  4. 微前端:使用qiankun框架从 0-1 搭建vue构成微前端项目

    第一步:新建项目 新建 main 主应用和两个使用 vue/cli 创建的子应用 vue create main vue create vue2-app-1 vue create vue2-app-2 ...

  5. qiankun 微前端脚手架搭建

    qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单.无痛的构建一个生产可用微前端架构系统. 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 ...

  6. 爱奇艺基于 Vue 的微前端架构实践

    点击上方"开发者技术前线",选择"星标" 18:50 在看 真爱 来自:爱奇艺技术产品团队 前言 近来,微前端的概念非常火爆,那么什么是微前端架构?微前端架构是 ...

  7. micro-app 微前端脚手架搭建

    关于micro-app 在micro-app之前,业内已经有一些开源的微前端框架,比较流行的有2个:single-spa和qiankun. single-spa是通过监听url change事件,在路 ...

  8. eclipse spring boot项目搭建_spring-boot-plus项目配置文件(四)

    spring-boot-plus项目配置文件 https://github.com/geekidea/spring-boot-plus https://github.com/geekidea/spri ...

  9. 项目搭建——Fastadmin项目搭载至虚拟空间

    使用场景:使用Fastadmin开发项目的小伙伴,我们需要部署项目至虚拟空间,因为TP5入口文件在public路径下,而虚拟空间只能识别项目根目录,所以我们需要进行如下配置: 1.首先参照官方说明 h ...

最新文章

  1. 关于计算机网络传输介质 下列叙述正确的是,《计算机基础》习题1-7
  2. java序列化_技术干货 | JAVA反序列化漏洞
  3. 作者:曾琛(1987-),女,就职于中国科学院计算技术研究所。
  4. 存储过程+调用存储过程+无/带参的存储过程+in参数+out参数+int out参数+为参数设置默认值...
  5. yarn-site.xml相关配置参数
  6. 后续:安装ORK功能包踩坑之路和解决方案
  7. linphone android下载,Linphone | F-Droid - Free and Open Source Android App Repository
  8. 数字孪生:迈向未来,智慧城市大脑运营方案及整体建设解决方针
  9. ubuntu 显示网速 16 18 20 都可以
  10. hugepage oracle 12c,Huge page使用的一些问题
  11. Reversible Data Hiding in Encrypted Images by Reversible Image Transformation
  12. 转行做程序员,月薪过万需要多久?
  13. 利用Python绘制一朵太阳花
  14. python快速实现数字华容道小游戏
  15. jwt 生成token时报错
  16. Python PaddleNLP实现自动生成虎年藏头诗
  17. java下bin目下的exe
  18. 2010Asia Harbin Regional Contest----Seaside(HDU3665)
  19. chrome frame节点 取_爬虫3-下(利用Selenium + Chrome Driver模拟用户操作浏览器)
  20. 排除计算机网络故障原则,计算机网络故障排除理论与实践研究

热门文章

  1. 苦练基本功-计算机网络基础-TCP建立连接
  2. html箭头相关符号
  3. Class热替换与卸载
  4. Spring+百度Api实现人脸认证对比(详细篇)
  5. 三色视者与四色视者身后的理论基础:色彩原理
  6. 【专题5: 硬件设计】 之 【9.案例一:门控开关,制作BOM表和成本核算】
  7. flash中乱数排列(随机数)方法
  8. 语言模型(五)—— Seq2Seq、Attention、Transformer学习笔记
  9. NVIDIA显卡驱动及CUDA相关安装流程(包括多版本cuda切换)
  10. Node fs同步、异步写入文件(一)