如何在 grunt-contrib-jshint 中执行具有不同选项的多个目标

How to execute multiple targets with different options in grunt-contrib-jshint

目标:灵活执行 jshint 以将结果输出到控制台(如果在开发中)或文件(如果是 released/in 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'
        }
    }
};

希望这对您有所帮助,这只是您可以改进代码的示例。

安装: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
}

如果您有两个目标之间相同的选项子集,您可以为该对象创建一个变量并将其值分配给两个目标的 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
        }
    }
};

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

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

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