将参数发送给Gulp中的jshint报告器

时间:2014-03-12 14:06:55

标签: node.js gruntjs jshint gulp

我将gulpfile与jshint配置为使用jshint-stylish记者。我需要将选项 verbose 传递给记者才能显示警告代码。是否可以使用Gulp进行?

目前我的gulpfile.js如下所示:

var gulp = require('gulp');
var jshint = require('gulp-jshint');
var compass = require('gulp-compass');
var path = require('path');
require('shelljs/global');

var jsFiles = ['www/js/**/*.js', '!www/js/libraries/**/*.js', 'www/spec/**/*.js', '!www/spec/lib/**/*.js'];
var sassFiles = 'www/sass/*.scss';

gulp.task('lint', function () {
    return gulp
        .src(jsFiles)
        .pipe(jshint())
        .pipe(jshint.reporter('jshint-stylish'));
});

gulp.task('compass', function () {
    gulp.src(sassFiles)
        .pipe(compass({
            project: path.join(__dirname, 'www'),
            css: 'css',
            sass: 'sass',
            image: 'img',
            font: 'fonts'
        })).on('error', function() {});
});

var phonegapBuild = function (platform) {
    if (!which('phonegap')) {
        console.log('phonegap command not found')
        return 1;
    }
    exec('phonegap local build ' + platform);
};

gulp.task('build:android', ['lint', 'compass'], function () {
    phonegapBuild('android');
});

gulp.task('build:ios', ['lint', 'compass'], function () {
    phonegapBuild('ios');
});

gulp.task('watch', function() {
    gulp.watch(jsFiles, ['lint']);
    gulp.watch(sassFiles, ['compass']);
});

gulp.task('default', ['lint', 'compass']);

4 个答案:

答案 0 :(得分:3)

嗯,这个,再加上时尚记者的输出因为蓝色文字的黑暗而难以在Windows上读取,所以我必须在安装后手动改变颜色,让我做点什么吧。所以你应该为这位记者带来更多的运气,我刚才写道:

https://github.com/spiralx/jshint-summary

你基本上就是这样使用它;

var summary = require('jshint-summary');

// ...

  .pipe(jshint.reporter(summary({
    verbose: true,
    reasonCol: 'cyan,bold',
    codeCol: 'green'
  })

并且summary函数将使用这些设置初始化传递给JSHint的函数 - 请参阅Github上的页面以获取更多文档。

它有一些非常基本的测试,并且库的gulpfile.js使用它来显示自己的JSHint输出:)

答案 1 :(得分:1)

如何使用类似技术,就像你已经使用phonegap一样?

var jshint = function (parameter) {
    // todo: define paths with js files, or pass them as parameter too
    exec('jshint ' + paths + ' ' + parameter);
};

答案 2 :(得分:0)

基于https://github.com/wearefractal/gulp-jshint/blob/master/index.js#L99,如果用字符串加载,gulp-jshint似乎不便于将更多名称传递给报告者。尽管如此,这似乎是一件简单的事情。我会跟你拉一个拉请求。 :d

或者,尝试这样的事情:

var stylish = require('jshint-stylish');

// ...

.pipe(jshint.reporter(stylish(opt)));

我很确定我的语法有误,但这可能会让你失意。

答案 3 :(得分:0)

这很烦人,并且让任何体面的记者在现有框架内使用都有些棘手。我为时尚记者提出了这个黑客攻击,它刚刚进入我的gulpfile.js

function wrapStylishReporter(reporterOptions) {
  var reporter = require(stylish).reporter,
    reporterOptions = reporterOptions || {};

  var wrapped = function(results, data, config) {
    var opts = [config, reporterOptions].reduce(function(dest, src) {
      if (src) {
        for (var k in src) {
          dest[k] = src[k];
        }
      }
      return dest;
    }, {});

    reporter(results, data, opts);
  };

  return jshint.reporter(wrapped);
}

然后是任务定义本身:

gulp.task('lint', function() {
  return gulp.src('+(bin|lib)/**/*.js')
    .pipe(jshint())
    .pipe(wrapStylishReporter({ verbose: true }))
    .pipe(jshint.reporter('fail'));
});

理想情况下,记者要么是一个接受选项参数并返回记者功能的函数,要么是一个相当基本的类,这样你就可以有选项和状态。

相关问题