我有一个Gulp任务将JavaScript源文件连接成一个并缩小它:
gulp.task('build', function() {
var destinationFile = 'final.js';
var dest = 'dest/';
return gulp.src('**/*.js')
.pipe(concat(destinationFile)) // Concat files
.pipe(uglify({})) // Minify
.pipe(gulp.dest(dest)); // Save final file to dest
});
如果其中一个JavaScript文件存在语法错误,则uglify
插件会引发错误。我可以检查错误,听听它:
var gutil = require('gulp-util');
gulp.task('build', function() {
var destinationFile = 'final.js';
var dest = 'dest/';
return gulp.src('**/*.js')
.pipe(concat(destinationFile))
.pipe(uglify({}))
.on('error', gutil.log) // Log errors
.pipe(gulp.dest(dest));
});
错误,例如可能是:
...
JS_Parse_Error {
message: 'SyntaxError: Unexpected token punc «,», expected punc «:»',
filename: 'final.js',
line: 2204,
col: 25,
pos: 89101,
stack: 'Error\n at new JS_Parse_Error (eva...
很遗憾,我无法在第2204行检查文件final.js
,以便在原始文件中查看错误广告。我无法做到这一点,因为该文件尚未写入文件系统。
当然,我可以将文件写入磁盘之前调用uglify
并稍后检查:
var gutil = require('gulp-util');
gulp.task('build', function() {
var destinationFile = 'final.js';
var dest = 'dest/';
return gulp.src('**/*.js')
.pipe(concat(destinationFile))
.pipe(gulp.dest(dest)) // Save file to disk before uglify it
.pipe(uglify({}))
.on('error', gutil.log)
.pipe(gulp.dest(dest));
});
但是这样我写了两次相同的文件并且我不喜欢它(例如,对性能不是很好)。
是否可以在uglify发生错误时将文件写入磁盘?
类似的东西:
var gutil = require('gulp-util');
gulp.task('build', function() {
var destinationFile = 'final.js';
var dest = 'dest/';
return gulp.src('**/*.js')
.pipe(concat(destinationFile))
.pipe(gulp.dest(dest))
.pipe(uglify({}))
.on('error', function(err) {
// ... save content of "dest" file somewhere...
})
.pipe(gulp.dest(dest));
});
谢谢。