为Cordova项目设置并发的grunt任务

时间:2014-09-29 12:00:54

标签: cordova gruntjs

我使用节点 Grunt 进行Cordova混合移动开发。

这是我的文件夹结构

myApp
|
|__ platforms
|
|__ www
|
|__ merges
|
|__ src
     |
     |___ app
     |     |__ ios
     |     |    |__ js
     |     |    |    |__ file1.js
     |     |__ android
     |     |    |__ js
     |     |    |   |__ file2.js
     |     |    |   |
     |__ test
     |__ Gruntfile.js
     |__ bower_components
     |__ package.json

这是我的Grunt配置(Gruntfile.js)。

module.exports = function(grunt) {

   var config = {
     app: 'app',
     dist: '../www',
     platform: grunt.option('platform');
   };

   require('load-grunt-tasks')(grunt);

   grunt.initConfig({

     config: config,

     jshint: {
       options: {
         jshintrc: '.jshintrc'
       },
       all: [
         '<%= config.app %>/<%= config.platform %>/js/**/*.js'
       ]
     }

     // Others
   });

   grunt.registerTask('jshint-both-platforms', 'Run jshint for single or both platforms', function() {

      // if platform is not passed run jshint for both platforms one by one
      if(config.platform === null) {

        grunt.config.set('platform', 'ios');
        grunt.task.run(['jshint']);

        grunt.config.set('platform', 'android');
        grunt.task.run(['jshint']);

        grunt.config.set('platform', null);

        return;
      }

       // if the platform is passed run jshint for the passed one
       grunt.task.run(['jshint']);
   });

   // others
}

如果您看到jshint任务配置,我已经为android和ios使用了一个块。

我有一个名为jshint-both-platforms的自定义任务,如果用户不在命令行或终端中传递任何参数,则会为两个平台运行jshint。如果您看到自定义任务,则按顺序逐个运行两个平台的jshint任务。

如何同时为两个平台运行jshint任务?

1 个答案:

答案 0 :(得分:1)

grunt任务的步骤不是并发的,但您可以使用grunt parallelize在任务级别执行并发作业:

https://www.npmjs.org/package/grunt-parallelize