如何根据 g运行t 中的哪个任务 运行 进行登录?
How do I log depending on which task is run in grunt?
TL:DR - 是否可以在调用 g运行t 时检查某个 task/subtask 是否设置为 运行?像
if(grunt.runningTasks.substr('task:subtask') > -1)
原始问题 -
我的 karma.js 中有以下代码用于 g运行t。我想知道是否可以只执行正在 运行
的任务的功能
我从我的 g运行t 文件中提取配置(我正在使用 load-g运行t-config )并且我想根据我正在执行的任务进行记录 运行ning 以及是否输入了--browser
示例 运行 将是 g运行t karma:jenkins 但是这会输出每个目标的日志,因为每个目标都会调用函数,即使 jenkins 目标是唯一的目标运行
如何延迟 运行我的函数直到目标被实际调用?
module.exports = function(grunt, config) {
//function to calculate which browser to use as default if one is not specified on the command-line
var returnBrowser = function (taskName ) {
var defaults = config.defaultBrowsers,
browser = config.testBrowser;
if (!browser) {
browser = defaults[taskName];
if ( browser ) {
grunt.log.writeln("No browser option set for unit tests, using " + browser + " which is default for karma:" + taskName + " task.");
grunt.log.writeln("Use --browser=<chrome || firefox || ie> to set a specific browser");
} else {
grunt.log.writeln("No browser option set for unit tests and task karma:" + taskName + " does not have a default browser specified. Defaulting to IE");
grunt.log.writeln("Use --browser=<chrome || firefox || ie> to set a specific browser");
browser = defaults['default'];
}
}
return [browser];
}
return {
options: {
configFile: 'karmastandalone.conf.js',
singleRun: true,
autoWatch: false,
reporters: ['progress']
},
test: {
browsers: returnBrowser('test')
},
jenkins: {
browsers: returnBrowser('jenkins'),
options: {
reporters: ['progress', 'junit'],
junitReporter: {
outputFile: '<%= junitOutputFile %>'
}
}
}
}
};
好的,所以按照上面评论的路径,我现在更清楚地看到了OP的要求。不幸的是,据我所知,没有公开暴露 API。但是,您可以从传递到各个模块的 grunt
对象访问此信息。
在下面的示例中,我有一个简单的 build
任务,如您所见,它是另外两个任务的别名,其中一个任务指定了目标(子任务)。如果我需要知道给定任务是否指定了特定的子任务,我可以这样做:
grunt.registerTask('build', ['concat:js', 'uglify']);
grunt.registerTask('isjsbuild', function() {
var info = grunt.task._tasks['build'].info;
// 'info' in this case would be: "Alias for \"concat:js\", \"uglify\" tasks."
if (/^Alias.+?concat\:js/.test(info)) {
grunt.log.writeln('we have concat:js in an alias!');
// do whatever you need to here...
}
});
这里有一些明显的注意事项:首先是 这是一个未记录的内部对象! 这意味着它可能随时更改,所以 谨慎使用.
此外,我运行将此作为自己的任务。如果你 运行 它在你拥有的那个动态配置模块中,我不确定它会如何执行。此外,这不使用任何输入,但如果需要,您可以使用 grunt.option('whatever')
获取 CLI 选项。最后,这并不假设给定任务 (build
) 实际上在队列中,它只是根据当前配置获取信息,因此您可能需要检查给定任务是否在队列中类似于:grunt.task.exists('build');
希望对您有所帮助!
(如果你好奇的话,我从 Grunt source code 中收集到了这个。)
TL:DR - 是否可以在调用 g运行t 时检查某个 task/subtask 是否设置为 运行?像
if(grunt.runningTasks.substr('task:subtask') > -1)
原始问题 -
我的 karma.js 中有以下代码用于 g运行t。我想知道是否可以只执行正在 运行
的任务的功能我从我的 g运行t 文件中提取配置(我正在使用 load-g运行t-config )并且我想根据我正在执行的任务进行记录 运行ning 以及是否输入了--browser
示例 运行 将是 g运行t karma:jenkins 但是这会输出每个目标的日志,因为每个目标都会调用函数,即使 jenkins 目标是唯一的目标运行
如何延迟 运行我的函数直到目标被实际调用?
module.exports = function(grunt, config) {
//function to calculate which browser to use as default if one is not specified on the command-line
var returnBrowser = function (taskName ) {
var defaults = config.defaultBrowsers,
browser = config.testBrowser;
if (!browser) {
browser = defaults[taskName];
if ( browser ) {
grunt.log.writeln("No browser option set for unit tests, using " + browser + " which is default for karma:" + taskName + " task.");
grunt.log.writeln("Use --browser=<chrome || firefox || ie> to set a specific browser");
} else {
grunt.log.writeln("No browser option set for unit tests and task karma:" + taskName + " does not have a default browser specified. Defaulting to IE");
grunt.log.writeln("Use --browser=<chrome || firefox || ie> to set a specific browser");
browser = defaults['default'];
}
}
return [browser];
}
return {
options: {
configFile: 'karmastandalone.conf.js',
singleRun: true,
autoWatch: false,
reporters: ['progress']
},
test: {
browsers: returnBrowser('test')
},
jenkins: {
browsers: returnBrowser('jenkins'),
options: {
reporters: ['progress', 'junit'],
junitReporter: {
outputFile: '<%= junitOutputFile %>'
}
}
}
}
};
好的,所以按照上面评论的路径,我现在更清楚地看到了OP的要求。不幸的是,据我所知,没有公开暴露 API。但是,您可以从传递到各个模块的 grunt
对象访问此信息。
在下面的示例中,我有一个简单的 build
任务,如您所见,它是另外两个任务的别名,其中一个任务指定了目标(子任务)。如果我需要知道给定任务是否指定了特定的子任务,我可以这样做:
grunt.registerTask('build', ['concat:js', 'uglify']);
grunt.registerTask('isjsbuild', function() {
var info = grunt.task._tasks['build'].info;
// 'info' in this case would be: "Alias for \"concat:js\", \"uglify\" tasks."
if (/^Alias.+?concat\:js/.test(info)) {
grunt.log.writeln('we have concat:js in an alias!');
// do whatever you need to here...
}
});
这里有一些明显的注意事项:首先是 这是一个未记录的内部对象! 这意味着它可能随时更改,所以 谨慎使用.
此外,我运行将此作为自己的任务。如果你 运行 它在你拥有的那个动态配置模块中,我不确定它会如何执行。此外,这不使用任何输入,但如果需要,您可以使用 grunt.option('whatever')
获取 CLI 选项。最后,这并不假设给定任务 (build
) 实际上在队列中,它只是根据当前配置获取信息,因此您可能需要检查给定任务是否在队列中类似于:grunt.task.exists('build');
希望对您有所帮助!
(如果你好奇的话,我从 Grunt source code 中收集到了这个。)