【发布时间】:2015-01-09 12:20:48
【问题描述】:
TL:DR - 是否可以检查某个任务/子任务是否设置为在调用 grunt 时运行?像
if(grunt.runningTasks.substr('task:subtask') > -1)
原始问题 -
我的 karma.js 中有以下代码用于 grunt。我想知道是否可以只执行正在运行的任务的功能
我从我的 gruntfile 中提取配置(我正在使用 load-grunt-config )并且我想根据我正在运行的任务以及是否输入 --browser 进行日志
示例运行将是 grunt 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 %>'
}
}
}
}
};
【问题讨论】:
-
我有点困惑......那个 JS 模块是你试图运行的自定义 grunt 任务吗?
-
很抱歉造成混乱,这是 grunt-karma 任务。我正在使用 load-grunt-config ,它允许您将配置分解为单独的文件,因此该文件将是 karma.js 并将其 conf 导出为对象或函数。您可以查看该项目以了解有关此方法的更多详细信息
-
啊啊……明白了。好的,所以,我认为你可以做你所要求的,但据我所知,不仅仅是配置。我不在我的主计算机旁,但我会在我坐在办公桌前时尝试展示一个使用自定义任务的示例。
-
嗯...不确定完整的解决方案,但是对于您的第一个问题,您可以使用grunt API 来确定任务是否存在:
grunt.task.exists('task:subtask')(虽然我没有使用它用于子任务)。您可以使用以下命令获取命令行选项:grunt.option('browser') -
谢谢,我知道任务存在,但是我希望能够判断当前别名是否会调用任务(即,如果默认包含业力或任务又包含业力当 grunt 运行时)
标签: logging gruntjs task target