Grunt根据输入更改目标

时间:2015-02-12 12:33:16

标签: gruntjs command-line-interface

我的Gruntfile如下:

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

  var dictionary = {
      'all' : '**',
      'html5' : 'some/path'
  };

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

  grunt.initConfig({
      eslint : {
        options : {
          config : '.eslintrc'
        },
        target : ['hello/world/js/<HERE>/**.js']
      }
  });

  grunt.registerTask('test', 'Lint a set of files', function(set) {
    set = set || 'all';
    var path = dictionary[set];

    grunt.task.run('eslint');
  });
};

注意代码中的<HERE>。这就是我希望插入path变量的地方。我根本不知道该怎么做。

如果我输入grunt test:html5path变量设置为正确的路径,所以我得到了它,现在我只需要告诉ESLint在哪里lint。但是如何?

编辑: 根据接受的答案,我现在有这个,这是有效的!我想分享一下,以防其他人想看一看。

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

  var dictionary = {
      'webroot' : 'app/webroot/**',
      'html5' : 'app/webroot/js/some/path'
  };

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

  grunt.initConfig({
      eslint : {
        options : {
          config : '.eslintrc'
        },
        target : ['<%= path %>']
      }
  });

  grunt.registerTask('test', 'Lint a set of files', function(pathKey) {
    pathKey = pathKey || 'webroot';
    var path = (dictionary[pathKey] || pathKey) + '/*.js';
    console.log('Parsed path as', path);

    grunt.config.set('path', path);
    grunt.task.run('eslint');
  });
};

2 个答案:

答案 0 :(得分:1)

在grunt配置中保存给定路径的值并引用它:

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

  var dictionary = {
      'all' : '**',
      'html5' : 'some/path'
  };

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

  grunt.initConfig({
      eslint : {
        options : {
          config : '.eslintrc'
        },
        target : ['hello/world/js/<%= dir %>/**.js']
      }
  });

  grunt.registerTask('test', 'Lint a set of files', function(pathKey) {
      var dir = dictionary[pathKey]
      grunt.config.set('dir', dir );

    grunt.task.run('eslint');
  });
};

答案 1 :(得分:1)

您可以使用grunt.option将参数传递给Gruntfile。

Gruntfile中的

grunt.initConfig({
    eslint : {
      options : {
        config : '.eslintrc'
      },
      target : ['hello/world/js/<%= grunt.option('path') %>/**.js']
    }
});
来自CLI的

grunt test --path=foo获取'hello/world/js/foo/**.js'