简体   繁体   中英

How can I run a grunt task from within a grunt task?

I've created a new grunt task and within it I want to use grunt-contrib-concat to concatenate a few files together.

I looked through the docs but I don't find anything that hinted at being able to do this. It seems like a trivial use case, so I'm probably just over looking something.

Update 1:

I also want to be able to configure this task from within my custom task.

For example, I create a list of files in my custom task. After I have that list, I want to pass them to the concat task. How can I do that?

I would like to be able to do something like this.

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

Update 2:

To achieve what I want, I have to manually configure the grunt task. Here's an example that showed me what I wanted.

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

Here's an example of manually configuring a task within a task and then running it.

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');
    });

From 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']);
});

Thx to Arron that pointed us out in the right direction to his own question. The grunt.config is the key from the example above. This task will override the src property of the browserify task

Task definition:

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

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

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

  }); 

Task call:

grunt tests

or

grunt tests:somewhere/specPath.js

If you are feeling lazy I ended up publishing a npm module that forwards the configs from your task into the subtask that you want to run:

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

How can we run same task multiple times from a task for eg.

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);
 
});

I want to run test-perf with diff port every time according to version.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM