50

我创建了一个新的 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

4

5 回答 5

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');
    });
于 2013-03-08T17:47:53.213 回答
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']);
});
于 2013-03-08T00:36:28.803 回答
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
于 2014-03-18T10:42:09.310 回答
0

如果您觉得懒惰,我最终发布了一个 npm 模块,该模块将您的任务中的配置转发到您要运行的子任务中:

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

于 2014-07-25T17:45:50.527 回答
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);
 
});

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

于 2021-02-26T11:38:51.923 回答