Gulp任务:如果发生错误,将文件内容写入磁盘

时间:2017-03-09 15:02:17

标签: javascript error-handling gulp gulp-uglify

我有一个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)); 
    });

谢谢。

0 个答案:

没有答案