【转载】 尤雨溪谈Vue.js :缔造自由与真我

引自 码云"封面人物"

最初是什么动机促使了 Vue 的产生?

Vue 一开始完全是一个个人兴趣项目。2013 年的时候我还在 Google Creative Lab,那时候前端框架还处于比较草莽的阶段,React 刚刚发布还没几个人知道,最成熟的是 AngularJS (Angular 1)。我当时一方面是想自己实现一个简单的框架练练手,另一方面是想尝试一下用 ES5 的 Object.defineProperty 实现数据变动侦测。众所周知 AngularJS 使用的是脏检查,而当时大部分的应用还需要支持 IE8,所以不能全面使用 ES5,而个人项目则不需要考虑这些。Vue 就是这样作为一个实验性质的项目开始的。

Vue 的发展历程是什么样?从 1.0 到 2.0 有哪些大方面的改动?

Vue 的发展历程,从最初的实验阶段(2013 年中到 2014 年 2 月),0.x 阶段 (2014 年 2 月到 2015 年 10 月),1.x 阶段 (2015 年 10 月到 2016 年 9 月),到现在的2.x 阶段 (2016 年 9 月至今),加上正式对外发布之前的时间,到今天已经有 足足5 年多的时间了。 0.x - 1.0 的改动主要集中在模版语法上,在 1.0 之后,模版语法就相对稳定,没有再经历过特别大的改动了。2.0 的改动则专注于内部的渲染机制变化,引入了 Virtual DOM,从而获得了服务端渲染、原生渲染、手写渲染函数等能力。目前 3.0 正在竭力的开发过程中,主要集中于利用 ES2015 的新特性、改进内部架构和性能优化上。

作为创始人,目前您对 Vue 的贡献与初期相比大概占多少比重呢?

现在的Vue 跟运行初期相比,最大的区别就是框架涵盖的范围变大了许多。一开始 Vue 只有一个核心库,现在则是包含了路由、状态管理、CLI 工具链、浏览器开发者插件、ESLint 插件等等的全套设施。目前只有核心库依然由我维护,其它子项目基本都交给团队成员去做日常维护了。

Vue 的代码追求简约轻量,在实际开发中是怎么和“功能性”结合在一起的?

简约和功能之间的平衡确实是一个很有挑战性的设计问题。从我的角度来看,需要确保的是当用户不需要一个功能的时候,那么这个功能就不应该给用户造成额外的心智负担。比如说 Vue 的 动画组件,如果你不需要动画功能,那么你可以完全无视它的存在。从框架层面来说,这也体现在 Vue 的 “渐进式” 设计理念里面,比如如果你不需要客户端路由,那么你甚至不需要知道 vue-router 的存在。但对于需要这些功能的用户而言,这些功能都是包含在框架之内的。所以 Vue 的 API 列表看上去好像很长,但实际上手需要掌握的核心概念却很简单,用户只需要去了解功能的意义和价值就可以了。

目前市场上初创及中小型企业的技术团队为实现项目的高效开发及快速交付,对 Vue 的采用度非常高,那对于需要长期维护的项目能选择使用 Vue 吗?

当然也适合!但是需要团队有良好的开发规范,代码的可长期维护本质上是一个规范问题。要让一个人写出来的代码不仅能被以后的同一个人看懂,还能被团队里其它成员看懂,甚至是被很久以后新加入的人看懂。从这一点来说,灵活性跟长期可维护性肯定是有一定的冲突的,想要写出来的代码一致,就需要有制约。有人可能觉得 Vue 制约太少,但其实该有的都有,完全取决于你是否需要它们。如果你知道一个项目是要打长期战的,那么在启动项目的时候,就要有意识的选用框架所提供的有利于长期维护的功能。一方面是采用比如 Vuex 这样的状态管理方案 - Vuex 的代码是自带一定的强制规范的,它可以让大家写出来的修改状态代码都遵循一样的流程。另一方面则是需要团队制定严谨的开发规范,比如代码风格、静态检查、TypeScript、单元测试等等 —— 这些 Vue 都通过 Vue CLI 提供了工具层面的支持。我们在 3.0 中还会进一步加强和 TypeScript 的整合。

更多内容请 查看原文