【发布时间】:2015-10-08 14:32:26
【问题描述】:
我正在尝试 Gulp,我设置了一个任务来监视我的 .js 文件,以便在修改它们时运行我的测试并检查我的代码。
但是,自从我开始在我的代码中使用 Promise 后,watch 任务就中断了。我第一次修改监视文件时它会运行良好,但之后每次都会崩溃:
Message:
Object.keys called on non-object
Stack:
TypeError: Object.keys called on non-object
at Function.keys (native)
at processExports (/Users/hfp/code/coverall/node_modules/nodegit/node_modules/promisify-node/index.js:44:16)
at module.exports (/Users/hfp/code/coverall/node_modules/nodegit/node_modules/promisify-node/index.js:112:10)
at Object.<anonymous> (/Users/hfp/code/coverall/node_modules/nodegit/lib/nodegit.js:96:26)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/Users/hfp/code/coverall/lib/archive.js:10:13)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/Users/hfp/code/coverall/test/archive_spec.js:6:15)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
这是我完整的 Gulpfile,我使用 gulp dev 运行监视任务:
var gulp = require('gulp');
var mocha = require('gulp-mocha');
var gutil = require('gulp-util');
var eslint = require('gulp-eslint');
var console = require('better-console');
var runSequence = require('run-sequence');
var istanbul = require('gulp-istanbul');
var insert = require('gulp-insert');
var spec_files = 'test/**/*_spec.js';
var integration_files = 'test/**/*_integration.js';
var code_files = ['lib/**/*.js', 'helpers/**/*.js', 'index.js'];
var all_files = code_files.concat(spec_files, integration_files);
var coverage_report_dir = 'test/coverage';
var mocha_reporter = 'list';
var eslint_mocha_header = '/*eslint-env mocha */\n';
gulp.task('mocha', function() {
return gulp.src(spec_files, { read: false })
.pipe(mocha({ reporter: mocha_reporter }));
});
gulp.task('cov', function(cb) {
return gulp.src(code_files)
.pipe(istanbul({ includeUntested: true }))
.pipe(istanbul.hookRequire())
.on('finish', function () {
gulp.src([spec_files, integration_files])
.pipe(mocha({ reporter: 'dot' }))
.on('error', function(err) {
console.log('Error in tests, not checking coverage.');
cb(err);
})
.pipe(istanbul.writeReports( { reporters: ['html', 'text', 'text-summary'] }))
.on('end', cb);
});
});
gulp.task('dev', function() {
return gulp.watch(all_files, ['test'], { read: false });
});
gulp.task('lint', ['eslint-add-mocha-headers'], function(cb) {
return gulp.src(all_files)
.pipe(eslint({ useEslintrc: true }))
.pipe(eslint.format())
cb(err);
});
gulp.task('clear-console', function() {
return console.clear();
});
gulp.task('eslint-add-mocha-headers', function(cb) {
var truncated_header = eslint_mocha_header.substring(0, eslint_mocha_header.length - 1);
// turn the header into a regex so if I update the header, this task doesn't break
var header_regex = new RegExp('^' + truncated_header.replace(/\*/gi, '\\*').replace(/\//gi, '\\/'));
return gulp.src(spec_files)
.pipe(insert.transform(function(contents, file) {
if (contents.match(header_regex)) {
return contents;
}
return eslint_mocha_header + contents;
}))
.pipe(gulp.dest('test/'));
});
gulp.task('test', function(cb) {
return runSequence('clear-console',
'lint',
'mocha',
cb);
});
【问题讨论】:
标签: javascript node.js gulp gulp-watch