调用任务流

任务流是bone中非常重要的一个特性,任务流和GruntGulp的任务流概念相同,通过定义一个个的基本的任务单元,依次执行。bone的任务流还提供了调用系统命令的能力。

一个项目往往会有各种各样的辅助脚本,如开发调试、优化压缩、打包部署、在线debug等,不同的脚本可能使用不同的语言实现,也有不同的调用方式,bone提供了一种比较开放的方式能将所有的脚本整合在一起。

bone-cli模块提供了bone.task函数实现任务流来处理事物,先看看一个例子

这个示例里定义了一个foo的任务,这个任务由一个函数组成

一个基本的任务单元由两部分组成,任务名称和处理单元,处理单元可以是字符串、对象、函数,上面的代码中的foo任务对应的处理单元是一个函数。

var bone = require("bone");

bone.task("foo", function() {
    // do something
});

要执行这个任务,通过bone 任务名的方式执行这个任务

$ bone foo

任务也可以去调用其他任务,下面的示例定义了一个bar任务,依次调用了bone build命令和foo任务,这里参数使用build而不是使用bone build,是因为bone已经加载名为build的cli

var build = require("bone-cli-build");

bone.cli(build());
bone.task("bar", "build", "foo");

当然也可以去加载外部的命令,例如系统命令,以rm为例子,bar任务依次调用的系统rm命令,bone build命令和foo任务

bone.task("bar", "rm -rf ./dist", "build", "foo");

通过对象传递更详细的参数,下面的代码里定义的zoo任务效果和使用rm -rf ./dist定义的任务一样

bone.task("zoo", {
    exec: "rm",
    params: {
        _: "./dist",
        f: null,
        r: null
    }
})