在JavaScript的世界里,框架、库、插件很多时候是一种角色分类。先简单扯扯这几个分类,再深入看几个流行的例子。
框架(Framework)
框架提供一个现成的应用骨架,在此基础上的开发过程是丰富血肉的过程。前端JS框架往往已内建事件响应、客户端数据存储、数据绑定等功能。开发者可以快速着手实现业务逻辑,添加用户交互、产品功能、数据和内容等。
库(Library)
库是经过整理的函数集合。前端JS开发中用到的库常包含一些用于处理DOM元素、交互事件、cookie、动画、网络请求、字符串、日期等等的函数。开发者可以使用库组装自己的框架,或是分别完善产品的单元组件再拼装起来。
插件(Plugin)
插件一些时候和库同义,另一些时候直接提供部分的产品功能。比如在做静态博客时通过Disqus插件直接实现留言板。如果用过Wordpress,一定也在插件商店里搜索过各类插件。jQuery本身作为一个库也可以通过插件来扩展。很多即插即用的UI效果模版也可以看成是一个插件。
jQuery库
jQuery提供方法使用CSS选择器样式字符串来获取DOM元素,并且跨浏览器兼容。还包括事件处理器、动画、Ajax、链式操作等。在2006年发布时是前端开发革命性的里程碑。在开发时仍需要自己去实现应用结构(如MVC,MVVM等)。
Angular框架
Angular是谷歌开源的完整的MVC应用框架,使用HTML语言为模版,内建双向数据绑定用于同步模型与视图数据,加上依赖注入、控制器等等功能。使用Angular可以快速实现业务逻辑,结合MEAN栈在JS全栈开发中大放光彩。注意Angular1同2~5的差异还是很大的,2~5版使用TypeScript并加入模块化组件。
React库
Facebook于2013年出品的React库是第一个引入虚拟DOM的。React仅仅负责MVC中V(视图)的部分。开发中使用虚拟DOM和看起来很像HTML的JSX语法建立视图组件,通过props属性在虚拟的DOM组件间传递数据,建立state状态变量自动更新视图。非常适用于复杂的用户交互界面。由于React在视图上做到了一个极致,在其周围衍生出一个完整的生态环境,如Redux,Relay等库。
Vue框架
Vue结合了React和Angular的优点,使用虚拟DOM和状态抽象视图,并可以绑定数据。结合路由、状态管理等库可以高效完成完整的Web应用前端。Vue的学习曲线比Angular平滑,性能也有优势,这两年来发展很快。
Bootstrap的jQuery插件
在jQuery中调用Bootstrap提供的JS插件可以方便地实现已经写好的UI功能,如图片滚动等。
在JS的世界里,我们可以大致按如上分类来看框架、库、插件。但是如果你打开Bootstrap的中文主页,赫然的几个大字:“Bootstrap是最受欢迎的HTML、CSS和JS框架” 。。。Bootstrap仅仅负责UI样式和效果,为啥这里叫框架而不叫库呢?其实,人家想叫啥就叫啥。大多情况下框架的意思是说:“老铁,我给你的这把屠龙刀可以切菜、剁肉、削铅笔,不过要杀龙你还得自己去改改”。