Vue技术框架
本章节介绍了Vue项目可能用到的一些技术框架,帮助初学者更好的了解相关技术。
目录结构
以下是常见的一种项目目录结构(根据vue-cli3初始化后的项目结构修改),后续将讲解相关的技术:
Demo
|— dist // 构建产物
|— node_modules // npm依赖包
|— public // 第三方不打包资源
|— src // 源代码
| |— api // 接口处理(自行创建)
| |— assets // 资源文件
| |— components // 全局公用组件
| |— router // 路由规则(原文件router.js,建立文件夹管理)
| |— store // 状态管理(原文件store.js,建立文件夹管理)
| |— views // 所有视图页面
| |— utils // 公共工具(自行创建)
| |— App.vue // 入口页面
| └─ main.js // 入口 加载组件 初始化等
|— tests // 自动化测试
|— .browserslistrc //浏览器兼容配置
|— .editorconfig //编辑器风格配置
|— .env.development //开发环境变量配置(自行创建)
|— .env.production //生产环境变量配置(自行创建)
|— .eslintrc.js //ESLint规则配置
|— .gitignore //git忽略配置
|— babel.config.js //babel配置
|— package.json //npm配置
|— package-lock.json //npm依赖包锁定
|— postcss.config.js //webpack的css-loader配置
|— vue.config.js //vue-cli配置(自行创建)
└─ README.md //项目简介
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
基础技术
1. 打包工具
打包工具可以帮助我们组织代码、优化项目、压缩产物等。目前较流行的就是webpack,你需要好好阅读其概念和指南,这有助于你理解前端项目是如何管理组织的。
2. 包管理工具
- npm是官方管理工具;
- yarn是Facebook、Google等公司推出,对旧版本的npm问题进行优化的工具,如安装速度、更好的语义化、统一版本保证等,但随着npm5的发布,对以上问题进行了优化,优势已不明显。
具体可以参考npm和yarn的区别,我们该如何选择?
3. Javascript支持
3.1 Javascript
Javascript有ES5、ES6等语法,项目可选择目前较通用的ES6。若需要对低浏览器进行适配,可通过babel来兼容各浏览器,配置方法可参考browserslist 目标浏览器配置表,默认配置为:
> 1% // 全球超过1%人使用的浏览器
last 2 versions // 所有浏览器兼容到最后两个版本,根据CanIUse.com追踪的版本
not ie <= 8 // 排除ie9以下版本
2
3
提示
在vue-cli3项目中,你可以随意选择语法,默认情况下vue会根据源代码中出现的语言特性自动检测需要的 polyfill。但通常如无必要,建议使用ES6等统一语法(除非你真的需要某种新特性)。
3.2 TypeScript
TypeScript是Javascript的超集,它解决了ES5之前的一些语法问题,随着ES6的发布,TypeScript基本只剩数据强类型的优点。强类型数据在大型网站性能优化与数据形态上更优,你可以考虑要不要在vue中支持TypeScript。
提示
vue2对TypeScript的支持不算友好,在 Vue 的下一个大版本 (3.x) 中计划了相当多的 TypeScript 支持改进,包括内置的基于 class 的组件 API 和 TSX 的支持。
4. CSS支持
原生的css有时候写起来并不友好,如不支持参数等。于是有了sass、less这些扩展语言。sass和less可以使样式编写更加灵活、方便,它们有以下共性:
- 混合(Mixins):class中的class;
- 参数混合(Parametric):可以像函数一样传递参数的class;
- 嵌套规则(Nested Rules):class中嵌套class,从而减少重复的代码;
- 运算(Operations):css中的数学计算;
- 颜色功能(Color function):可以编辑你的颜色;
- 命名空间(Namespaces):样式分组,从而方便被调用;
- 作用域(Scope):局部修改样式;
- JavaScript表达式(Javascript evaluation):在CSS样式中使用Javascript表达式赋值。
LESS和Sass之间的主要区别是他们的实现方式不同。LESS是基于JavaScript运行,所以LESS是在客户端处理;而Sass是基于Ruby的,是在服务器端处理的。具体可以参考Less介绍及其与Sass的差异
5. 代码规范检测
统一的代码规范可以提高项目的可维护性。引入ESLint可以自动检测代码是否符合某一套规范。在vue-cli3中,提供以下代码规范可供选择:
- 只打印error
- Airbnb编程规范:互联网上最受欢迎的 JavaScript 编码规范之一。 它几乎涵盖了 JavaScript 的各个方面。
- Standard编程规范:一份强大的 JavaScript 编码规范,被很多知名公司所采用,比如 NPM、GitHub、mongoDB 和 ZenDesk 等。
- Prettier:可以自动格式化的一套代码规范。
提示
在vue-cli项目项目中,你可以配置每次保存文件都会检测规范,规范错误无法编译通过;commit之前必需解决规范错误
6. Mock数据
开发过程中,我们经常需要模拟后台返回数据。你可以使用mockjs来实现数据模拟。
它的原理是重写XMLHttpRequest
,对于我们需要拦截的接口返回模拟的数据,其他接口则正常请求。
7. PWA
PWA全称Progressive Web App,即为渐进式WEB应用。一个 PWA 应用首先是一个网页, 可以通过 Web 技术编写出一个网页应用. 随后添加上 App Manifest 和 Service Worker 来实现 PWA 的安装和离线等功能。其解决了以下3个问题:
- 可以添加至主屏幕,点击主屏幕图标可以实现启动动画以及隐藏地址栏;
- 实现离线缓存功能,即使用户没有网络,依然可以使用一些离线功能;
- 实现了消息推送。
注意
使用PWA会额外带来开发量。
VUE相关技术
1. Vue-CLI
Vue CLI是一个基于 Vue.js 进行快速开发的完整系统,提供:
- 通过 @vue/cli 搭建交互式的项目脚手架。
- 通过 @vue/cli + @vue/cli-service-global 快速开始零配置原型开发。
- 一个运行时依赖 (@vue/cli-service),该依赖:
- 可升级;
- 基于 webpack 构建,并带有合理的默认配置;
- 可以通过项目内的配置文件进行配置;
- 可以通过插件进行扩展。
- 一个丰富的官方插件集合,集成了前端生态中最好的工具。
- 一套完全图形化的创建和管理 Vue.js 项目的用户界面。
Vue CLI 致力于将 Vue 生态中的工具基础标准化。它确保了各种构建工具能够基于智能的默认配置即可平稳衔接,这样你可以专注在撰写应用上,而不必花好几天去纠结配置的问题。与此同时,它也为每个工具提供了调整配置的灵活性,无需 eject。
2. Vue-Router
Vue Router是官方提供的路由管理工具,其支持以下两种写法:
- hash:路由网址如:localhost/#/nav/index
- history:路由网址如:localhost/nav/index(浏览器需要支持html5,反向代理支持url重定向至index.html)
3. Vuex
Vuex是官方专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。
4. 组件库
当前Vue的组件库较流行的有:
- Element:饿了么前端团队维护,成熟强大,但图标和组件丰富性没有其他两个好。
- IView:由 TalkingData 前端可视化团队部分成员开发维护,在Vue领域较成熟,但生态丰富性不如其他两个。
- Ant:阿里巴巴前端团队维护,是一门成熟的设计语言,但Vue的组件库起步比其他两个晚了2年,目前还有许多待完善的地方。
5. 国际化
你可以使用vue-i18n来做国际化(中英文切换)。如果你还使用了组件库,你还需要结合组件库自带的国际化来实现全局国际化。
6. 自动化测试
Vue-CLI支持两种单元测试和两种E2E测试(黑盒测试)。你可以利用它们来做一些自动化测试,避免每次项目迭代都要手动做全功能测试。