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

Arr*_*n S 47 javascript node.js gruntjs

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

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

更新1:

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

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

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

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

更新2:

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

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

Arr*_*n S 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');
    });
Run Code Online (Sandbox Code Playgroud)


Pas*_*cle 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']);
});
Run Code Online (Sandbox Code Playgroud)

  • 我今天偶然发现了一件事.如果你想多次运行相同的任务,但配置不同,那么通过`grunt.config`将选项传递给每个任务是个坏主意,因为任务排队不运行,因此当它们开始执行时,只有最后分配的配置价值观将是有效的.例如,如果要将JS文件连接到一个目标,将CSS文件连接到另一个目标,则只有最后一个配置才有效.为避免这种情况,您还需要动态地为每个任务设置单独的目标. (4认同)

小智 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']);

  }); 
Run Code Online (Sandbox Code Playgroud)

任务电话:

grunt tests
Run Code Online (Sandbox Code Playgroud)

要么

grunt tests:somewhere/specPath.js
Run Code Online (Sandbox Code Playgroud)