0

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

可能吗?我可以将单个目标添加到我的 jshint 设置中,但除了报告者详细信息之外,我的所有选项都是相同的。所以最好不要复制那些。我需要从“全部”进行连接,并使用所有全局选项和来自被调用目标的特定选项。如何?

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'
        }
    }
};
4

3 回答 3

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
}
于 2016-05-11T08:58:37.213 回答
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
        }
    }
};
于 2016-05-11T12:30:42.673 回答
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
        }
    }
}

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

于 2016-05-11T21:27:00.447 回答