我将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']);
答案 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'));
});
理想情况下,记者要么是一个接受选项参数并返回记者功能的函数,要么是一个相当基本的类,这样你就可以有选项和状态。