2014-03-12 27 views
2

我有gjp文件和jshint配置使用jshint时尚的记者。我需要通过选项详细给记者才能显示警告代码。使用Gulp可以做到吗?发送参数给jshint记者在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']); 

回答

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输出:)

+0

现在,它的工作原理!谢谢! –

0

基于https://github.com/wearefractal/gulp-jshint/blob/master/index.js#L99看来,一饮而尽,jshint如果用字符串加载它不利于传递比名称更向记者介绍。这似乎是一个简单的事情来扩展。我会比赛你的拉请求。 :d

或者,尝试这样的事:

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

// ... 

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

我敢肯定,我的语法错误,但是这可能让你脱胶。

+0

谢谢,我检查,但它是不工作 –

1

如何使用类似的技巧,就像你已经用phonegap做过的那样?

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

我喜欢用jshint的JavaScript库(在为了导入它),而不是执行,但在这种情况下,它看起来很好,我没有找到其他选择。 –

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

理想的记者会是个功能需要一个选项参数并返回记者功能,或者一个相当基本的类,这样你可以有选项以及状态。

+0

我试过类似的方式来使用包装,但它打破了我的观察任务。当我运行gulp watch并且在代码中出现错误时,lint发现它,但lint任务永远不会结束。 –