2013-10-28 74 views
2

我有兩個不同的路徑,我想編譯移動和桌面代碼。我想通過在命令行中傳遞一個grunt參數來進行交替。通過命令行更改Grunt配置變量

/** 
* @module Build 
* @class Build.Config 
* @static 
*/ 

module.exports = function(grunt) { 

var config = {}; 

    var NewPath; 

    var env = grunt.option('target') || "Mobile"; 


    if (env == "Desktop") { // MAKE THIS DYNAMIC WITH COMMAND LINE ARGUMENT 
     newPath = "source/desktop/"; 
    } 
    else { 
     newPath = "source/mobile/"; 
    } 

config.root = newPath; 
config.stylesheets = config.root + '/stylesheets'; 
config.javascripts = config.root + '/javascripts'; 
config.images = config.root + '/images'; 
config.jsbin = config.javascripts + '/generated'; 
config.cssbin = config.stylesheets + '/generated'; 
config.docsbin = 'docs'; 



// Project configuration. 
grunt.initConfig({ 

    'beautifier': { 
     'options': { 
      'indentSize': 1, 
      'indentChar': '\t', 
      'spaceAfterAnonFunction': true 
     } 
    }, 

    'beautify': { 
     'files': [ config.javascripts + '/app/**/*.js' ] 
    }, 

    'requirejs': require('./build/config/requirejs.js')(config), 

    'watch': require('./build/config/watch.js')(config), 
    'stylus':require('./build/config/stylus.js')(config) 

}); 


// Default task. 
grunt.registerTask('default', ['stylus:compile','requirejs']);  
grunt.registerTask('dev', ['stylus:dev']); 

grunt.loadNpmTasks('grunt-contrib-watch'); 
grunt.loadNpmTasks('grunt-contrib-requirejs'); 
grunt.loadNpmTasks('grunt-contrib-stylus'); 
}; 

回答

5

原來我這樣做是正確我只是需要在變量ENV正確傳遞:

$咕嚕--target =「桌面」

0

到--option另一種是通過冒號傳遞它。例如,把它傳遞給jshint

grunt jshint:desktop 

然後配置咕嚕使用process.argv拿起該命令行參數,你可以用它來配置你的路或任何其他可能需要:

module.exports = function(grunt) { 
    "use strict"; 

    //dynamic config after the ':'. 'desktop' here 
    var env = process.argv[2].split(':')[1]; 


    var config = { 
     pkg: grunt.file.readJSON('package.json'), 

     jshint: { 
      options: { 
       jshintrc: '.jshintrc', 
       "force": true 
      } 
     }, 
    }; 

    //... 

    config.jshint[env] = { // ex: $ grunt jshint:desktop 
     src: ['public/'+env+'/js/main.js'] 
    }; 

    //... 

    // Project configuration. 
    grunt.initConfig(config); 

    //... 
}; 

一個警告在使用process時,當您使用重複執行過程的咕嚕任務(如有用的grunt-concurrent)時,它不起作用。在這種情況下,使用@im_benton所示的grunt.option更好。通過grunt mytask --myvar=myval並在你身上撿起Gruntfile.js作爲grunt.option('myvar')`