首页 > 经济观察 正文

vue是什么软件 基于Vue的前端架构,我总结15点经验

1.分解需求

技术栈

考虑到后续招聘的技术栈和现有人员,选择Vue作为框架。

公司的主要业务是GIS和BIM,通常开发一些大中型系统,所以vue-router和vuex必不可少。

元素UI被放弃,选择了Ant Design Vue。

在工具库中选择lodash。

搭建脚手架

建立NPM私人服务。

使用节点环境开发命令行界面工具,参考我自己写的一篇文章-。

基于@vue/cli的模板。

根据业务需求定义开发中可能用到的各种功能。

性能优化,比如Ant Design Vue组件库的优化。

开发规范

统一和规范代码样式、命名规则和目录结构。

静态资源的使用规范。

单元测试并提交在线测试规范。

Git提交记录和多人协作规范。

2.风格

CSS预处理器的选择

sass/Scs

较少的

唱针

你为什么选择两个?因为公司团队倾向于使用SCS进行开发,较少是覆盖ant design vue的风格,手写笔只喜欢这种风格。

本地风格和全球风格

地方风格

通常使用限定范围的方案:

全球风格

全局样式目录:style

variable . scss:global variable management Mixins . scss:global mixins management global . scss:global style

其中,variable.scss和mixinss.scss在global.css之前加载,这些变量和mixin不需要导入就可以在项目中的任何地方使用。

体验优化

页面加载进度条

使用NP progress在路由跳转时制作一个伪进度条,这样用户就可以在网络不好的时候知道页面已经加载了:

美化滚动条

一直用Mac做前端,突然发现同事的Windows上出现了一个非常难看的滚动条。为了保持一致:

静态资源加载页面

第一次加载页面时,会有很多白屏时间。这时候做个加载效果看起来会很友好,其实很简单。用public/index.html写一些静态样式就可以了

移动终端的VH问题100vh

在移动端使用100vh时,发现在Chrome和Safari浏览器中,浏览器栏、部分导航栏和链接栏会导致不同的演示:

你认为100vh ===视口高度是多少

实际上100vh ===视口高度+浏览器工具栏高度

解决办法

安装VH-检查

定义一个CSS混合

之后就没地方点了。

3.组件库

Element UI很久没有更新了,之前使用过React的Ant Design,所以组件库中选择了Ant Design Vue。

覆盖蚂蚁设计风格

设计师眼中的蚂蚁设计= = '丑'。

1.使用。较少文件

Ant Design Vue样式使用Less作为开发语言,定义了一系列全局/组件样式变量,因此需要安装越来越少的loader来覆盖默认样式。

优点是:

方便快捷,可以修改类,覆盖默认变量。

缺点是:

必须导入。导入后会导入所有组件样式,导致打包的css体积约为500kb。

2.使用JavaScript对象

内置变量可以用JavaScript对象修改,需要配置的更少:

这一步可以继续优化,Ant Design Vue的组件样式可以通过babel-plugin-import按需加载:

优点是:

可以根据需要导入,打包的CSS卷取决于你引用了多少组件。

缺点是:

类不能用于样式重写。

杀死无用的图标

Ant Design Vue一次性引入所有图标,使得图标打包后的体积高达几百kb。这些图标大部分不会被设计师采用,所以有些图标应该被扼杀:

创建一个图标. js来管理Ant Design Vue图标。这里,以加载图标为例:

你怎么知道你想加载的图标在哪里?

目录@ant-design/icons/lib中有三种图标,分别是填充、轮廓和双音。内部文件不是svg格式,而是js和ts格式,这就是为什么我们可以这样引入图标。

求解瞬间多语言

解决了这个问题,蚂蚁设计Vue还是很大的。这是因为矩在Ant Design Vue中强烈依赖于这个插件,所以使用webpack插件来减少封装量。这里我们只保留zh-cn语言包:

有些组件需要在页面中引用

比如Ant Design Vue中一些体积较大的组件,应该根据业务需求加载到页面中,尽量保证第一屏的加载速度:

4.静态资源和图标

静态资源

所有的静态资源文件都会上传到阿里巴巴云OSS,所以会区分环境变量。

和的属性分别配置有本地静态资源服务器地址和在线操作系统地址。

本地静态资源服务器是由pm2+http-server创建的,设计人员可以直接剪切并扔进去。

自动注册Svg图标

在日常开发中,总会有大量的图标需要使用。在这里,我们直接选择使用SVG图标。但是每次使用的时候通过路径找到这个图标不是很麻烦吗?

以下是我想要的:

最后,它需要打包后组合成一个雪碧地图。

首先需要自动注册文件夹下的svg图标,需要设置webpack和svg-sprite-loader,所有文件打包成svg-sprite。

编写一个全球通用的Vue组件:

@/components/m-svg/index.vue

参数名

类型:字符串

默认值:null

描述:放置在文件夹下的文件名

风格

图标的大小可以通过宽度+高度属性来更改。

通过更改字体大小属性,宽度和高度= font-zise * 1.4

5.异步请求

封装Axios

Axios封装在路径下,包括请求参数、请求头、错误消息、请求拦截器、响应拦截器、统一错误处理、baseURL设置等。

别废话,直接粘贴代码:

用VUE_APP_BASE_URL来区分在线和开发环境的API地址。

代码起着关键作用,比如令牌过期时的验证。

一个名为sotre的包被用作存储令牌的本地存储工具。

跨域问题

跨域问题通常由后端直接解决。如果不好意思打扰他们,可以使用devServer提供的代理:

模拟数据

很常见的一种情况,后端接口不出来,前端盯着。

mock数据函数基于mock.js开发(打开新窗口),通过webpack自动加载Mock配置文件。

规则

所有模拟配置文件都应该放在路径中。

在内部,可以建立与业务相关的文件夹,通过分类来存储配置文件。

所有配置文件都应根据的命名标准创建。

使用ES6模块或阵列导出配置文件。

入口文件

样本模板

6.选择途径

布局

布局暂时分为三类:

框架:通常需要登录或授权认证的路由。

框架输出:不需要动态确定权限的路由,如登录页面或常规页面。

错误页面:例如404。

权限验证

通过获取当前用户权限比较路由表,生成当前用户权限可访问的路由表,并通过router.addRoutes动态挂载到路由器上

确定页面是否需要登录状态,必要时跳转到/user/login

如果令牌不在本地存储中,请跳转到/user/login

如果令牌存在,用户信息不存在,则自动调用vuex '/system/user/getInfo '

在路由中,集成了权限验证功能。当您需要为页面添加权限时,请在“元:

作家(author的简写)

类型:布尔值

注意:当身份验证为真时,此页面需要验证登录权限,这仅对框架in路由有效。

许可

类型:对象

描述:权限每个键对应权限功能的验证。当key的值为true时,表示它有权限。如果key为false,可以用指令隐藏对应的DOM。

在此粘贴路由跳转时的权限验证代码:

页面开发

根据业务需求,按照路由层次在视图中创建相应的页面组件,以文件夹的形式创建,并在文件夹中创建index.vue文件作为页面的入口文件。

页面中的组件:在页面文件夹下创建一个组件文件夹,并在其中创建相应的组件文件。如果是复杂的组件,请以文件夹的形式创建该组件。

工具模块:高度抽象的工具模块。js文件应该在@/src/libs中创建。

7.结构优化

包分析工具

建完代码,什么东西占了这么多空?直观猜测或者使用webpack-bundle-analyzer。

打开G

是的,在这句话里,后端就得支持你。gz文件,而你只需要坐着等老板来夸:

路由延迟加载

这一块@vue/cli已经得到了帮助,但是我们需要知道它的原理以及如何配置它。

添加评论webpackChunkName是很有必要的,至少在你打包之后,你就知道哪个页面变臭变大了。

预载&。预取

不知道这两个函数的@vue/cli补课,对你处理加载性能很有帮助。

8.测试框架

直接使用官方的Vue Test Utils,可以测试组件,很不错。

编写单元测试在团队中实际上很难推进。不知道你怎么想的。

9.组件库

对于很多第三方工具,我坚持认为二次打包成vue插件不需要花费太多的开发成本,但是可以让你在后续的开发中更加灵活。

我用vue插件打包了以下库,并将它们提交给npm私有服务:

数字动画

代码高亮显示

大文件上传需要后端配合

图片预览

Excel导入和导出

富文本编辑器

减价编辑器

代码编辑器

如果你有兴趣上传大文件,可以留言。我会单独进行,稍后再详细写这篇文章。

10.状态管理

内置一些功能,主要打包以下功能:

用户信息管理

登陆

菜单管理

普遍获得信息

全屏操作

装货

日志管理

11.过滤器

Filter是Vue提供的一个非常有用的功能。听说vue3没了。

我写了几个常用的过滤器:

日期时间

剩余时间

环境敏感链接

文件大小

数字量

浮点精度

12.说明

自定义说明非常有用:

组件权限验证

文本复制

快捷键绑定

滚动到指定位置

图片延迟加载

焦点

13.开发规格

ESLint

无论是多人合作还是单个项目,代码规范都非常重要。这样做既能很大程度上避免基本语法错误,又能保证代码的可读性。

这里我们使用Airbnb JavaScript风格指南。

这套规格给我的感觉就是很严!

CSS规范

降低选择器的复杂性

浏览器读取选择器,遵循从选择器右侧读取到左侧的原则。

求所有p元素。

找出结果1中的元素是否有包含类名文本的父元素

找出结果2中的元素是否有id为block的父元素

选择器优先级

内嵌>:标识选择器>:类别选择器>:标签选择器

选择器越短越好。

尽量使用高优先级的选择器,比如ID和类选择器。

避免使用通配符*。

使用flexbox

在早期的CSS布局中,我们可以对元素实现绝对定位、相对定位或者浮动定位。现在,我们有了一个新的布局,flexbox,它比早期的布局有一个优势,就是性能更好。但是flexbox兼容性还是有一些问题,不是所有的浏览器都支持,所以要慎重使用。浏览器的兼容性:

Chrome 29+

Firefox 28+

Internet Explorer 11

Opera 17+

Safari 6.1+(前缀为-webkit-)

Android 4.4+

iOS 7.1+(前缀为-webkit-)

动画性能优化

在CSS中,变换和不透明这两个属性的变化并不触发重排和重绘,它们是合成器可以独立处理的属性。

属性值

当数值为0到1之间的小数时,建议省略0的整数部分。

长度为0时建议省略单位。

不建议使用命名颜色值。

建议当一个元素需要被支撑以包含内部浮动元素时,clearfix应该通过将clear设置为伪类或者触发BFC来完成。尽量不要添加空标签。

除了公共风格,尽量不要在业务代码中使用!重要.

建议z-index分层管理文档流外绝对定位元素的可视化层次关系。

字体排版

字体大小应不小于12px。

字体粗细属性建议用数字描述。

行高定义文本段落时,应使用数值。

Vue代码规范

传统的

在组件中使用数据属性时(除了new Vue之外的任何地方),其值必须是返回对象的函数。

道具的定义要尽可能详细,至少要明确其类型。

布尔类型的属性,如果为真,直接写属性值。

不要对计算中的变量进行操作。

父组件和子组件之间的通信应该优先于此。$parent或通过道具和事件更改道具。

为了维护内部组件及其子树的状态,键必须始终与组件上的v-for一起使用。

V-if和v-for不能同时使用

尽量不要在原型上挂公共方法。它们可以写在utils文件或mixin文件中。不要向全球注册企业公共组件。

请勿在vue原型上安装任何第三方插件。

通用性强的方法应该封装在libs、全局组件或指令集中。

设置组件样式的范围。

尽可能使用说明缩写。

状态管理

状态(打开新窗口)是一个单一的状态树。在State中,我们需要定义数组、对象、字符串等。我们需要管理。只有在这里定义了,才能得到你在vue的组件里定义的这个对象的状态。

被修改的数据必须通过。

必须同步每个可能的更改,以创建一个或多个项目来更改它。

服务器获得的数据存储在中,该数据作为原始数据保留,不能更改。

getter(打开新窗口)有点类似于vue.js的计算属性,当我们需要从存储状态中导出一些状态时,我们需要使用getter,它会接收状态作为第一个参数,getter的返回值会根据其依赖关系进行缓存,只有当getter中的依赖值发生变化时才会重新计算。

通过处理您需要的数据格式,而不是修改原始数据。

它在组件中不是强制的,因为您可能需要使用和。

更改的唯一方法是提交更改(打开新窗口)。

组件中使用辅助函数将组件中的映射为调用。

命名采用+的规则。

定义为确保在交换路由时可以初始化数据。

行动

页面繁重的数据接口应该尽可能在动作中调用(打开新窗口)。

服务器返回的数据尽量不要处理,保留原始数据。

必须通过调用来更改获取的数据。

模块

通常,模块(打开新窗口)根据页面进行划分。

默认情况下,脚手架的基本功能是内置的。

向页面的每个页面模块或子模块添加属性。

14.完整详细的使用文件

无论是函数还是构件库或者其他工具,都需要完善的文档作为参考。即使是车轮的建造者,也忍不住在时间长了之后会忘记很多细节。

这里我用vuepress构建文档,方便快捷。

参考

15.Git多人协作流程

该公司使用内部构建的GitLab托管代码

根仓库

项目开始时,项目经理构建最原始的仓库,称为根仓库。

源仓库有一个功能:

总结参与项目的每个开发者的代码。

存储趋于稳定和可发布的代码。

向主分支提交合并请求可以触发测试环境构建。

源仓库是受保护的,开发者不能直接开发。

开发商仓库

任何开发人员都无权直接操作根仓库。源仓库建立后,每个开发人员需要做的就是把源仓库的一个Fork作为自己日常开发的仓库。

每个开发者Fork的仓库是完全独立的,互不干扰。

每个开发人员将代码提交给自己的仓库。开发工作完成后,开发人员可以向源仓库发送一个Pull Request,本地仓库首先合并源仓库来解决冲突。

发起mergerrequest请求管理员将他们自己的代码合并到主仓库或源仓库的其他分支中。

Git过程

前端项目将在仓库下创建分支,用于提取和合并代码。如果有多个不同的测试环境,将根据测试环境创建分支。

在本地仓库中创建您的分支机构和其他职能分支机构。

在开发过程中,不允许直接在分行上开发,新建分行进行开发。

规范详细的写作,建议使用工具投稿。

完成开发后,将相应的分支合并到自己仓库的分支中。

分支到你自己的远程仓库。

提交给仓库分公司。

提醒前端负责人查看代码,解决冲突或使测试环境在线。

冲突解决后拉最新代码。

海报

本文转载自互联网,如有侵权,联系删除

相关推荐

襄樊机场 好消息!襄阳机场正式宣布!

襄樊机场 好消息!襄阳机场正式宣布!

今天,记者从襄阳机场获悉,襄阳机场于3月29日正式复飞,并向上海、广州、深圳等至少12个城市开放。根据《中国民用航空总局关于恢复湖北省民航航班的通知》,除武汉天河机场外,湖北省各机场国内客运...

21-07-20 0 1

专升本学校选择 专升本怎样选择学校和选择?

专升本学校选择 专升本怎样选择学校和选择?

近年来,由于就业压力的增加,越来越多的学生加入了大学毕业生的行列。每年到了招生季,都有人在院校和专业的选择上纠结。今天,边肖将为大家回答这个问题!首先是学校的选择。这里我想告诉你的是,学校在...

21-07-20 0 0

草原鹿 秋日的甘肃肃南草原 马鹿奔跑牛羊漫步

草原鹿 秋日的甘肃肃南草原 马鹿奔跑牛羊漫步

图为牛羊在夕阳下觅食。吴雪峰图为禁牧后牧民的田园音乐。吴雪峰秋天,甘肃肃南草原,奔跑的马鹿,新生的蘑菇,夕阳下悠闲觅食的牛羊,牧民在草原上采蘑菇。近年来,苏南实施了草原生态保护补贴和奖励政策...

21-07-20 0 0

感谢您的支持