为了自定义我的grunt任务,我需要在启动grunt时访问命令行上给出的grunt任务名称。
这些选项没有问题,因为它有很好的文档记录(grunt.options)。 还有很好的文档说明如何在运行grunt任务时找到任务名称 。
但我之前需要访问任务名称。
例如,用户写道
grunt build --target=client
在Gruntfile.js
中配置grunt作业时,我可以使用
grunt.option('target')
获取'client'
。
但是如何在任务构建开始之前获取参数build
?
非常感谢任何指导!
答案 0 :(得分:26)
你的grunt文件基本上只是一个功能。尝试将此行添加到顶部:
module.exports = function( grunt ) {
/*==> */ console.log(grunt.option('target'));
/*==> */ console.log(grunt.cli.tasks);
// Add your pre task code here...
使用grunt build --target=client
运行应该为您提供输出:
client
[ 'build' ]
此时,您可以在运行任务之前运行所需的任何代码,包括使用新依赖项设置值。
答案 1 :(得分:3)
更好的方法是使用grunt.task.current
,其中包含有关当前正在运行的任务的信息,包括name
属性。在任务中,上下文(即this
)是同一个对象。所以。 。 。
grunt.registerTask('foo', 'Foobar all the things', function() {
console.log(grunt.task.current.name); // foo
console.log(this.name); // foo
console.log(this === grunt.task.current); // true
});
如果build
是其他任务的别名,并且您只想知道导致当前任务执行的键入的命令,我通常使用process.argv[2]
。如果您检查process.argv
,您会发现argv[0]
是node
(因为grunt
是node
进程),argv[1]
是{{ 1}},grunt
是实际的grunt任务(后跟argv[2]
其余部分中的任何参数)。
编辑:
来自任务的grunt@0.4.5 上argv
的示例输出(不能从当前任务获得当前任务)。
console.log(grunt.task.current)
答案 2 :(得分:1)
您可以使用grunt.util.hooker.hook
。
示例(Gruntfile.coffee的一部分):
grunt.util.hooker.hook grunt.task, (opt) ->
if grunt.task.current and grunt.task.current.nameArgs
console.log "Task to run: " + grunt.task.current.nameArgs
<强> CMD 强>:
C:\some_dir>grunt concat --cmp my_cmp
Task to run: concat
Running "concat:coffee" (concat) task
Task to run: concat:coffee
File "core.coffee" created.
Done, without errors.
还有一个我用来阻止某些任务执行的黑客攻击:
grunt.util.hooker.hook grunt.task, (opt) ->
if grunt.task.current and grunt.task.current.nameArgs
console.log "Task to run: " + grunt.task.current.nameArgs
if grunt.task.current.nameArgs is "<some task you don't want user to run>"
console.log "Ooooh, not <doing smth> today :("
exit() # Not valid. Don't know how to exit :), but will stop grunt anyway
允许使用CMD :
C:\some_dir>grunt concat:coffee --cmp my_cmp
Running "concat:coffee" (concat) task
Task to run: concat:coffee
File "core.coffee" created.
Done, without errors.
CMD,当被阻止时:
C:\some_dir>grunt concat:coffee --cmp my_cmp
Running "concat:coffee" (concat) task
Task to run: concat:coffee
Ooooh, not concating today :(
Warning: exit is not defined Use --force to continue.
Aborted due to warnings.