gulp记者提交

时间:2014-04-25 10:04:33

标签: javascript node.js gulp

这是我的配置:

var gulp = require('gulp'),
// load plugins
$ = require('gulp-load-plugins')();

gulp.task('scripts', function () {
  return gulp.src([
      'app/scripts/**/*.js',
      'gulpfile.js',
      'protractor.conf.js',
      'test/**/*.js'
    ])
    .pipe($.jshint())
    .pipe($.jshint.reporter('jshint-junit-reporter'))
    .pipe($.jshint.reporter('jshint-stylish'))
    .pipe($.size());
});

jshint-junit-reporter必须输出到文件,我已经尝试过了:

.pipe($.jshint.reporter('jshint-junit-reporter').pipe(gulp.dest('output.xml')))

.pipe($.jshint.reporter('jshint-junit-reporter')).pipe(gulp.dest('output.xml'))

但它只是将gulp.src重定向到名为:output.xml

的目录

2 个答案:

答案 0 :(得分:0)

我找到了解决此限制的方法。

确保npm install --save jshint jshint-junit-reporter gulp-shell

您还要确保您有一个.jshintrc文件,您可以在其中运行gulp。

然后在gulpfile.js

var shell = require('gulp-shell')
gulp.task('lint-tofile', shell.task(
    ["node_modules/.bin/jshint www/js/ --reporter=node_modules/jshint-junit-reporter/reporter.js > test/results/lint.xml"], 
    { cwd: __dirname, ignoreErrors: true }
));

您需要更改" www / js"和" test / results / lint.xml"位。

此外,我还使用新的outputFile选项创建了pull request to the jshint-junit-reporter维护者。

答案 1 :(得分:0)

我认为一个自定义的js提示记者就是你所追求的。尝试根据您的需求调整以下内容:

var fs = require('fs'); // Native Node package
var mapStream = require('map-stream'); // Install via npm

gulp.task('js:lint', function(){
    var jsHintReporter = function (taskName) {
        var toWrite = [];
        var stream = mapStream(function (file, cb) {
            var noErrors = true;
            if (!file.jshint.success) {
                var message = 'JSLINT fail in ' + file.path;
                noErrors = false;
                console.log(message);

                file.jshint.results.forEach(function (err) {
                    var filePathDirs = err.file.split('/');
                    var filePath = filePathDirs.slice(
                        filePathDirs.length - 2,
                        filePathDirs.length
                    ).join('/');

                    if (err.error) {
                        var errorMessage = '' + filePath + ': line ' + err.error.line + ' | col ' + err.error.character + ' | ' + err.error.reason;
                        toWrite.push(errorMessage);
                        console.log(errorMessage);
                    }
                });
            }

            if (noErrors) {
                var message = taskName + ': 0 issues!';
                toWrite.push(message);
                console.log(message);
            }

            fs.writeFile('jsLintOutput.txt', toWrite.join('\n'))

            cb(null, file);
        });

        return stream;
    };
    var reporter = new jsHintReporter('js:lint');
    var stream = gulp.src('resources/js/**/*.js')
        .pipe(gp.jshint())
        .pipe(reporter);

    return stream;
});