如何定义(内部)任务而不将其列在“grunt --help”中

时间:2013-06-18 07:15:14

标签: javascript gruntjs

我正在定义这样的任务:

grunt.registerTask('tmp', 'An internal task', [
    'clean:tmp',
    'jshint',
    'ember_templates',
    'neuter',
    'copy:tmp',
    'replace:tmp',
]);

因为这是一个不应该被用户调用的任务,所以我想避免用grunt --help显示它。这可能吗?

我在documentation

中找不到任何相关的配置参数

1 个答案:

答案 0 :(得分:1)

您可以在grunt-code中看到此代码loops over an array of all tasks - currently starts at line 106

的帮助任务
exports.tasks = function() {
  grunt.log.header('Available tasks');
  if (exports._tasks.length === 0) {
    grunt.log.writeln('(no tasks found)');
  } else {
     exports.table(exports._tasks.map(function(task) {
       var info = task.info;
       if (task.multi) { info += ' *'; }
       return [task.name, info];
     }));
  ...

这意味着我们应该看看这个array is filled - (currently starts at line 94)

exports.initTasks = function() {
  // Initialize task system so that the tasks can be listed.
  grunt.task.init([], {help: true});

  // Build object of tasks by info (where they were loaded from).
  exports._tasks = [];
  Object.keys(grunt.task._tasks).forEach(function(name) {
    exports.initCol1(name);
    var task = grunt.task._tasks[name];
    exports._tasks.push(task);
  });
};

在这里你可以看到,所有已注册任务都有一个循环(对象grunt.task._tasks)。在循环内部没有检查,所以现在必须看到这个对象被填充的位置。

这是在registerTask-prototype-method (currently line 78)

中完成的
// Register a new task.
Task.prototype.registerTask = function(name, info, fn) {

    ... some other code

    // Add task into cache.
    this._tasks[name] = {name: name, info: info, fn: fn};

现在这对你的问题意味着明确的否定。你不能注册一个不会在--help。

上显示的任务

但是对于您的问题(私人任务)有一个issue filed on the grunt github repository。随意分叉存储库,使其工作并将其返回给社区; - )