如何在grunt-contrib-jshint中使用不同选项执行多个目标

时间:2016-05-10 21:46:44

标签: gruntjs jshint grunt-contrib-jshint

目标:灵活执行jshint以将结果输出到控制台(如果在开发中)或文件(如果在Jenkins中发布)。

有可能吗?我可以将个别目标添加到我的jshint设置中,但除了记者详细信息之外,我的所有选项都是相同的。所以不重复那些是很好的。我需要从“all”进行连接,并使用所有全局选项和被调用目标的特定选项。怎么样?

jshint.js:

module.exports = {
    options: {
        node: true,
        browser: true,
        blah: blah...
    },
    all: [
        'Gruntfile.js',
        '<%= yeoman.app %>/modules/**/*.js',
        '<%= yeoman.app %>/*.js'
    ],
    dev: {
        options: {
            reporter: 'checkstyle'
        }
    }
    release: {
        options: {
            reporter: 'checkstyle',
            reporterOutput: 'myfile.xml'
        }
    }
};

3 个答案:

答案 0 :(得分:0)

我希望这可以帮助您,它只是一个示例,您可以改进代码。

安装:grunt-contrib-jshint

Gruntfile.js

//Jshint ===============================    
            var jshint;
            config.jshint = jshint ={};


            jshint.dist = {
                options: {jshintrc: ".jshintrc"},
                files: {all: ["lib/main.js","lib/test.js"]}
            };

            jshint.dev = {
                options: {jshintrc: ".jshintrc.dev"},
                files: {all: ["lib/main.js","lib/test.js"]}
            };

<强> .jshintrc

{
        "strict":true,
        "laxcomma":true,
        "sub":true
}

<强> .jshintrc.dev

{
        "strict":true,
        "laxcomma":true,
        "sub":true,
        "debug":true
}

答案 1 :(得分:0)

如果两个目标之间的选项子集相同,则可以为对象创建变量,并将其值分配给目标的option键:

var reporterOptions = {
        foo: 'red',
        bar: 'green',
        baz: 'blue'
    };

    module.exports = {
        options: {
            node: true,
            browser: true,
            blah: blah...
        },
        all: [
            'Gruntfile.js',
            '<%= yeoman.app %>/modules/**/*.js',
            '<%= yeoman.app %>/*.js'
        ],
        dev: {
            options: reporterOptions
        }
        release: {
            options: reporterOptions
        }
    };

如果要在一个地方维护选项值,但又想有选择地决定将哪些选项应用于哪些目标,则可以使用点表示法引用存储在变量中的值。

var reporterOptions = {
    foo: 'red',
    bar: 'green',
    baz: 'blue'
};

module.exports = {
    options: {
        node: true,
        browser: true,
        blah: blah...
    },
    all: [
        'Gruntfile.js',
        '<%= yeoman.app %>/modules/**/*.js',
        '<%= yeoman.app %>/*.js'
    ],
    dev: {
        options: {
          foo: reporterOptions.foo
          bar: reporterOptions.bar
        }
    }
    release: {
        options: {
          foo: reporterOptions.foo
          baz: reporterOptions.baz
        }
    }
};

答案 2 :(得分:0)

我最终走了变量路线,但是将其用于文件源,然后覆盖目标中的必要选项。

var files = [
    'Gruntfile.js',
    '<%= yeoman.app %>/modules/**/*.js',
    '<%= yeoman.app %>/*.js'
];

module.exports = {
    options: {
        reporter: require('jshint-stylish'),
        node: true, ...
    },
    dev: {
        src: files
    },
    release: {
        src: files,
        options: {
            reporter: 'checkstyle',
            reporterOutput: 'myfile.xml',
            reporterOutputRelative: false
        }
    }
}

根据我读过的其他内容,我不认为默认选项会在目标中起作用并允许覆盖,而且我也遇到了文件问题,但这解决了所有问题。