天天看点

《JavaScript开发框架权威指南》——2.2 Grunt是如何工作的

本节书摘来自异步社区《javascript开发框架权威指南》一书中的第2章,第2.2节,作者:【美】tim ambler , nicholas cloud著,更多章节内容可以访问云栖社区“异步社区”公众号查看

grunt为开发者提供了一个工具包,用于创建命令行程序来执行项目构建过程中的重复性任务,如压缩javascript代码、编译sass样式表等。不过,grunt的能力并不限于创建简单的任务(通常这些任务不会被分享或者复用),以解决特定工程遇到的特定需求,其真正的力量源于其将任务打包为可复用的插件的能力。这些插件可以被发布、分享、使用以及由其他人进行改进。本书写作之时已经有超过4 400个这样的插件。

grunt的运转依赖于四个核心组件,接下来逐一论述。

2.2.1 gruntfile.js

在grunt中处于核心地位的是gruntfile——一个位于工程根目录下的名为gruntfile.js(见清单)的node模块。正是这个文件使得我们可以加载grunt插件,创建自定义任务,并根据项目需求对它们进行配置。grunt每次运行时的首要任务都是接受该模块发出的指令。

清单2-2 gruntfile示例

2.2.2 任务(tasks)

作为grunt的基本构建模块,任务实际上只是由grunt的registertask()方法注册的具名函数。清单所示的hello-world任务将向控制台输出一条消息。在命令行中调用该任务的结果,如清单所示。

清单2-3 运行清单中所示的hello-world任务

如清单所示,多个grunt任务也可以由单条命令调用执行。每个任务都将按照参数的传入顺序依次执行。

清单2-4 顺序运行多个任务

我们刚看到的hello-world任务是简单独立型grunt任务的代表。这样的任务可以用于实现一些简单的功能,以解决特定项目的需求。通常我们不会考虑其复用或者分享的问题。但是多数时候,你会发现我们实际用到的都不是这样的独立型任务,而是那些已经打包为grunt插件并发布到npm的任务。以插件的形式发布更便于别人使用或者参与改进。

2.2.3 插件(plugins)

grunt插件是一系列能够用于不同项目的可配置任务(以npm包的形式发布)的集合。现存的grunt插件数以千计,可谓洋洋大观。清单中的grunt方法loadnpmtasks()用以加载名为grunt-contrib-uglify的node模块。该模块可以将工程中的javascript代码合并为单个压缩(minified)文件,以适应发布需求。

2.2.4 配置

grunt以强调“配置优先”(configuration over code)而著称:任务和插件的功能均可通过配置文件进行定制,以适应不同工程的需求。正是这种代码与配置分离的特性,使开发者能够创造出容易被复用的插件。本章稍后将介绍配置grunt插件和任务的各种不同的方法。

继续阅读