2014-03-12 29 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任務永遠不會結束。 –