如何在繁琐的任务中运行grunt任务?

时间:2013-03-08 00:25:03

标签: javascript node.js gruntjs

我已经创建了一个新的grunt任务,在其中我想使用grunt-contrib-concat将几个文件连接在一起。

我查看了文档,但我没有找到任何暗示能够做到这一点的内容。这似乎是一个微不足道的用例,所以我可能只是在寻找一些东西。

更新1:

我还希望能够在自定义任务中配置此任务。

例如,我在自定义任务中创建了一个文件列表。拥有该列表后,我想将它们传递给concat任务。我怎么能这样做?

我希望能够做到这样的事情。

grunt.task.run('concat', { src: ['file1','file2'], dest: 'out.js'})

更新2:

为了实现我想要的,我必须手动配置grunt任务。这是一个向我展示我想要的例子。

https://github.com/gruntjs/grunt-contrib/issues/118#issuecomment-8482130

5 个答案:

答案 0 :(得分:34)

以下是在任务中手动配置任务然后运行任务的示例。

https://github.com/gruntjs/grunt-contrib/issues/118#issuecomment-8482130

 grunt.registerMultiTask('multicss', 'Minify CSS files in a folder', function() {
        var count = 0;
        grunt.file.expandFiles(this.data).forEach(function(file) {
            var property = 'mincss.css'+count+'.files';
            var value = {};
            value[file] = file;
            grunt.config(property, value);
            grunt.log.writeln("Minifying CSS "+file);
            count++;
        });
        grunt.task.run('mincss');
    });

答案 1 :(得分:27)

来自https://github.com/gruntjs/grunt/wiki/Creating-tasks

grunt.registerTask('foo', 'My "foo" task.', function() {
  // Enqueue "bar" and "baz" tasks, to run after "foo" finishes, in-order.
  grunt.task.run('bar', 'baz');
  // Or:
  grunt.task.run(['bar', 'baz']);
});

答案 2 :(得分:11)

对Arron来说,我们向他们指出了他自己问题的正确方向。 grunt.config是上例中的键。此任务将覆盖browserify任务的src属性

任务定义:

  grunt.registerTask('tests', function (spec) {

    if (spec) {
      grunt.config('browserify.tests.src', spec);
    }

    grunt.task.run(['jshint', 'browserify:tests', 'jasmine']);

  }); 

任务电话:

grunt tests

grunt tests:somewhere/specPath.js

答案 3 :(得分:0)

如果你感到懒惰,我最后发布了一个npm模块,它将你的任务中的配置转发到你想要运行的子任务中:

https://www.npmjs.org/package/extend-grunt-plugin

答案 4 :(得分:0)

我们如何从一个任务中多次运行相同的任务,例如

grunt.registerTask('asyncfoo', 'My "asyncfoo" task.', function() {
  
  var done = this.async();
  // Run some sync stuff.
  grunt.log.writeln('Processing task...');
  var versions = Object.keys(versionConf);
 
  setTimeout(function() {
    versions.forEach(function(version) {
      console.info(version);
      //process.env.version = version;
      grunt.config('port', versionConf[version].port);
      grunt.task.run('test-perf');
    })
    done();
  }, 1000);
 
});

我想根据版本每次运行带有 diff 端口的 test-perf。