Vue项目架构设计与工程化实践
摘自Berwin《Vue项目架构设计与工程化实践》github.com/berwin/Blog/issues/14
1.Vue依赖套件
vuex:项目复杂后,用vuex来管理状态
element-ui:基于vue2.0的组件库
vue-router:单页面应用必须使用的前端路由
axios:vue官方推荐的http客户端
vue-cli:webpack模板,功能全。有hot reload,linting,testing,css extraction等
2.整体架构设计
表现层: Store Router View Component
业务层: 服务(Service)
API层: 接口API Mock + Validator
Util层: Util
基础设施层:init(初始化配置文件) dev(开发环境) deploy(编译源码,静态文件上传cdn,Hera发步上线)
3.目录结构
|——README.md
|——build #build脚本
|——config #prod/dev build config等文件
|——hera #代码发布上线
|——index.html #最基础的网页
|——package.json
|——src #Vue.js核心业务
| |——App.vue #App Root Component
| |——api #接入后端服务的基础API
| |——assets #静态文件
| |——components #组件
| |——event-bus #Event Bus事件总线,类似EventEmitter
| |——main.js #Vue入口文件
| |——router #路由
| |——service #服务
| |——store #Vuex状态管理
| |——util #通用utility,derective,mixin还有绑定到Vue.prototype的函数
| |——view #各个页面
|——static #DevServer静态文件
|——test #测试
4.模块
表现层:
store Vuex状态管理
router 前端路由
view 各业务页面
component 通用组件
业务层:
service 处理服务端返回的数据(类似data format)例如service同时调用了不同的api,把不同的返回数据整合在一起发送到store中
API层:
api 请求数据,Mock数据,反向校验后端api
Util层
util 存放项目全局的工具函数
... 如果项目需要,可写一些vue指令
基础设施层
init 自动化初始化配置文件
dev 启动dev-server,hot-reload,http-proxy等辅助开发
deploy 编译源码,静态文件上传cdn,生成html,发布上线
全局事件机制
event-bus 主要用来处理特殊需求
5.特殊场景
1>在router中拿不到vue实例,无法直接操作vuex的方法,此时采用event-bus
2>生存周期不同步问题:event-bus的生存周期是全局的,只有在页面刷新的时候,event-bus才会重置内部状态,而组件的声明周期相对来说短了很多
6.登录功能逻辑
client ——请求数据——> server
<——返回未登录错误码——
——>跳转 登录中心
<——sid
——请求数据(携带sid)——>
<——返回数据 + 种cookie——
——请求数据(携带cookie)——>
<—— 返回数据 ——
1>监听所有api的响应,如果未登录后端会返回一个错误码
2>如果后端返回
Vue项目架构设计与工程化实践的更多相关文章
- Vue 项目架构设计与工程化实践
来源 文中会讲述我从0~1搭建一个前后端分离的vue项目详细过程 Feature: 一套很实用的架构设计 通过 cli 工具生成新项目 通过 cli 工具初始化配置文件 编译源码与自动上传CDN Mo ...
- 基于 Angularjs&Node.js 云编辑器架构设计及开发实践
基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- no.2淘宝架构背后——零售业务中台架构设计探讨及实践读后感
2017年8月12日,袋鼠云首席架构师正风在“网易博学实践日:大数据与人工智能技术大会”进行<淘宝架构演进背后——零售业务中台架构设计探讨及实践>演讲分享.传统零售行业如何选择应对新经济模 ...
- Vue 项目骨架屏注入与实践
作为与用户联系最为密切的前端开发者,用户体验是最值得关注的问题.关于页面loading状态的展示,主流的主要有loading图和进度条两种.除此之外,越来越多的APP采用了“骨架屏”的方式去展示未加载 ...
- 基于Repository模式设计项目架构—你可以参考的项目架构设计
关于Repository模式,直接百度查就可以了,其来源是<企业应用架构模式>.我们新建一个Infrastructure文件夹,这里就是基础设施部分,EF Core的上下文类以及Repos ...
- QingStor 对象存储架构设计及最佳实践
对象存储概念及特性 在介绍 QingStor️对象存储内部的的架构和设计原理之前,我们首先来了解一下对象存储的概念,也就是从外部视角看,对象存储有什么特性,我们应该如何使用. 对象存储本质上是一款存储 ...
- Springboot项目架构设计
导航 前言 流水线 架构的艺术 项目架构 理解阿里应用分层架构 superblog项目架构 结语 参考 本节是<Spring Boot 实战纪实>的第7篇,感谢您的阅读,预计阅读时长3mi ...
- 企业架构设计之IFW实践回顾
前言 笔者几年前曾参与过一套网络银行的系统建设以及后续这套系统在信用.云服务.保险.基金.支付等领域的复用,使用了IFW模型的变体.当时仅仅是根据架构师的设计进行编码.测试和交付以及后续的维护,没有对 ...
随机推荐
- [转]jquery插件创建 jquery.fn.extend与jquery.extend
本文转自:http://www.cnblogs.com/wyjgreat/archive/2011/07/19/2110754.html jQuery为开发插件提拱了两个方法,分别是: JavaScr ...
- [Android]JsonObject解析
android和服务器进行交互的时候往往会有数据的传输,而数据中有一种类型就是Json型,这两天在研究API接口的问题,服务器返回的数据类型都是Json型的.例如: 1.接收到的json字符串分为两种 ...
- 【转】android ViewPager,ViewFlipper,ViewFlow实现左右滑动
转自:http://blog.csdn.net/zhouyuanjing/article/details/8290454 开篇 首页只是作为ViewPager,ViewFlipper,ViewFlow ...
- C# 操作 Excel(.xls和.xlsx)文件
C#创建Excel(.xls和.xlsx)文件的三种方法 .NET 使用NPOI导入导出标准Excel C# 使用NPOI 实现Excel的简单导入导出 NET使用NPOI组件将数据导出Excel-通 ...
- mysql+C#
MySqlParameter[] prams = ]; prams[] = new MySqlParameter("@personindex", personindex); pra ...
- 将php代码部署到新浪云测试(简单方法,包含数据库的连接)
很多人做项目都是先在本地测试然后上传到服务器运行,如果包含了操作数据库的信息往往需要进行一番调试,这里我总结一下把php代码包含数据库的连接如何上传到新浪云服务器的步骤. 1.在新浪云应用SAE的控制 ...
- php静态变量static
静态变量 function test() { static $a = 0; echo $a; $a++; } test(); test(); test();
- Mysql的transaction实现(转)
(http://www.blogjava.net/i369/archive/2007/04/29/108906.html) transaction在数据库编程中是一个重要的概念,这样做可以控制对数据库 ...
- oracle多表查询和子查询练习
--1.列出至少有三个员工的所有部门和部门信息. SELECT D.DEPTNO, D.DNAME, D.LOC, T.COUNTS FROM DEPT D, (SELECT DEPTNO, CO ...
- Struts2_Struts标签大致内容
Struts-Tags1.通用标签 a) property b) set i.默认为 action scope,会将值放入 request 和 ActionContext中 ii. page.requ ...