grunt.task
注册、运行和加载外部任务。
任务 API
在任务运行时,Grunt 通过 this
对象在任务函数内部公开许多特定于任务的实用程序属性和方法。有关这些属性和方法的列表,请参阅任务内部指南。
许多实用程序属性和方法可通过 this
对象在任务内部使用。
请注意,任何标有 ☃(Unicode 雪人)的方法也可以直接在 grunt
对象上使用。仅供参考。有关更多使用信息,请参阅API 主页。
创建任务
grunt.task.registerTask ☃
注册“别名任务”或任务函数。此方法支持以下两种签名
别名任务
如果指定了任务列表,则新任务将是一个或多个其他任务的别名。每当运行此“别名任务”时,taskList
中指定的每个任务都将按指定的顺序运行。taskList
参数必须是任务数组。
grunt.task.registerTask(taskName, taskList)
如果传递了可选的 description
字符串,则在运行 grunt --help
时将显示该字符串
grunt.task.registerTask(taskName, description, taskList)
此示例别名任务定义了一个“默认”任务,如果在未指定任何任务的情况下执行 Grunt,则将自动运行“jshint”、“qunit”、“concat”和“uglify”任务
task.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);
也可以指定任务参数。在此示例中,别名“dist”运行“concat”和“uglify”任务,每个任务都带有“dist”参数
task.registerTask('dist', ['concat:dist', 'uglify:dist']);
函数任务
如果传递了 description
和 taskFunction
,则在每次运行任务时都会执行指定的函数。此外,在运行 grunt --help
时将显示指定的描述。特定于任务的属性和方法在任务函数内部作为 this
对象的属性可用。任务函数可以返回 false
以指示任务已失败。
请注意,下面解释的 grunt.task.registerMultiTask
方法可用于定义一种称为“多任务”的特殊类型的任务。
grunt.task.registerTask(taskName, description, taskFunction)
如果通过 grunt foo:testing:123
运行 Grunt,则此示例任务将记录 foo, testing 123
。如果在没有参数的情况下以 grunt foo
的形式运行任务,则该任务将记录 foo, no args
。
grunt.task.registerTask('foo', 'A sample task that logs stuff.', function(arg1, arg2) {
if (arguments.length === 0) {
grunt.log.writeln(this.name + ", no args");
} else {
grunt.log.writeln(this.name + ", " + arg1 + " " + arg2);
}
});
有关任务和别名任务的更多示例,请参阅创建任务文档。
此方法也可用作 grunt.registerTask。
grunt.task.registerMultiTask ☃
注册“多任务”。多任务是一种隐式迭代其所有命名的子属性(也称为目标)的任务,前提是没有指定目标。除了默认属性和方法之外,任务函数内部还可以使用额外的多任务特定属性作为 this
对象的属性。
许多贡献任务,包括 jshint 任务、concat 任务 和 uglify 任务 都是多任务。
grunt.task.registerMultiTask(taskName, description, taskFunction)
给定指定的配置,如果通过 grunt log:foo
运行 Grunt,则此示例多任务将记录 foo: 1,2,3
,或者如果通过 grunt log:bar
运行 Grunt,则将记录 bar: hello world
。但是,如果以 grunt log
的形式运行 Grunt,则它将首先记录 foo: 1,2,3
,然后记录 bar: hello world
,最后记录 baz: false
。
grunt.initConfig({
log: {
foo: [1, 2, 3],
bar: 'hello world',
baz: false
}
});
grunt.task.registerMultiTask('log', 'Log stuff.', function() {
grunt.log.writeln(this.target + ': ' + this.data);
});
有关多任务的更多示例,请参阅创建任务文档。
此方法也可用作 grunt.registerMultiTask。
grunt.task.requires
如果其他某个任务失败或从未运行,则使任务失败。
grunt.task.requires(taskName);
grunt.task.exists
添加于 0.4.5 版本
使用名称检查注册任务中是否存在任务。返回一个布尔值。
grunt.task.exists(name)
grunt.task.renameTask ☃
重命名任务。如果您想覆盖任务的默认行为,同时保留旧名称,这可能会很有用。
请注意,如果任务已重命名,则 this.name 和 this.nameArgs 属性将相应更改。
grunt.task.renameTask(oldname, newname)
此方法也可用作 grunt.renameTask。
加载外部定义的任务
对于大多数项目,任务将在 Gruntfile 中定义。对于较大的项目,或者在需要跨项目共享任务的情况下,可以从一个或多个外部目录或 Npm 安装的 Grunt 插件加载任务。
grunt.task.loadTasks ☃
从相对于 Gruntfile 的指定目录加载与任务相关的文件。通过指定本地 Grunt 插件的“tasks”子目录的路径,可以使用此方法从该插件加载与任务相关的文件。
grunt.task.loadTasks(tasksPath)
此方法也可用作 grunt.loadTasks。
grunt.task.loadNpmTasks ☃
从指定的 Grunt 插件加载任务。此插件必须通过 npm 本地安装,并且必须相对于 Gruntfile。可以使用 grunt-init gruntplugin 模板 创建 Grunt 插件:grunt init:gruntplugin
。
grunt.task.loadNpmTasks(pluginName)
此方法也可用作 grunt.loadNpmTasks。
任务队列
Grunt 会自动将命令行中指定的所有任务排队并运行,但各个任务可以将其他任务排队以供运行。
grunt.task.run
将一个或多个任务排队。taskList
中指定的每个任务都将在当前任务完成后立即按指定的顺序运行。任务列表可以是任务数组或单个任务参数。
grunt.task.run(taskList)
grunt.task.clearQueue
完全清空任务队列。除非排队了其他任务,否则不会再运行任何任务。
grunt.task.clearQueue()
grunt.task.normalizeMultiTaskFiles
将任务目标配置对象规范化为 src-dest 文件映射数组。此方法由多任务系统 this.files / grunt.task.current.files 属性在内部使用。
grunt.task.normalizeMultiTaskFiles(data [, targetname])