上文介绍过前端模块化的发展,但是它们都有一个共同点:源代码无法直接运行,必须通过转换后才可以正常运行。 构建就是做这件事,将源代码转换成可执行的JavaScript、CSS、HTML代码,包括如下内容:
- 代码转换
- 文件优化
- 代码分割
- 模块合并
- 自动刷新
- 代码校验
- 自动发布
构建其实是工程化、自动化思想在前端开发中的体现,将一系列流程用代码去实现。下面介绍一些常用构建工具:
Npm Script
Npm Script是Npm内置的一个功能,允许在package.json文件里使用script字段定义任务。Npm Script的优点是内置,无需要安装其他依赖。其缺点是功能太简单,不能方便地管理多个任务之间的依赖。
Grunt
Grunt也是一个任务执行者。Grunt有大量现成的插件,也能管理任务之间的依赖关系,自动化地执行依赖任务,每个任务的具体执行代码和依赖的关系写在配置文件Gruntfile.js里。Grunt的缺点是集成度不高,要写很多配置文件后才可以使用,无法做到开箱即用。
Gulp
Gulp是一个基于流的自动化构建工具。除了可以管理和执行任务,还支持监听文件、读写文件。Gulp被设计的非常简单,只通过下面5种方法就可以支持几乎所有的构建场景:
- 通过gulp.task注册一个任务
- 通过gulp.run执行任务
- 通过gulp.watch监听文件变化
- 通过gulp.src读取文件
- 通过gulp.dest写文件
Gulp的最大特点是引入了流的概念,同时提供了一系列常用的插件去处理流,流可以再插件之间传递。
Fis3
Fis3是一个来自百度的优秀构建工具,相对于Grunt、Gulp这些只提供了基本功能的工具,Fis3集成了Web开发中的常用构建功能。它的缺点是目前官方已经不再维护和更新了。
webpack
Webpack是一个模块化打包工具,在Webpack里面一切文件皆为模块,通过Loader转换文件,通过Plugin注入钩子,最后输出由多个模块组合成的文件。Webpack专注于构建模块化项目。
Webpack的有优点是:
- 专注于处理模块化的项目,能做到开箱即用
- 通过Plugin拓展,完整好用又不失灵活
- 使用场景不局限于 Web 开发
- 社区庞大活跃
Rollup
Rollup是一个和Webpack类似但专注于ES6的模块打包工具。它的亮点在于,能针对ES6源码进行Tree Shaking,以除去那些已经被定义但没被使用的代码并进行Scope Hoisting,以减少输出文件的大小和性能提升。然而Rollup这些亮点随后就被Webpack模仿和实现了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。