Gulp任务仅使用gulp.watch()失败

时间:2015-10-28 18:12:31

标签: javascript gulp

我编写了一个gulp任务,在目录中找到.json个文件,假设有一个相应的.atlas文件,并将它们内嵌到我的JS项目中的一个对象中:

gulp.task('spine', function() {

    var fs = require('fs');

    function parseAtlas(atlasPath) {
        var atlas = fs.readFileSync(atlasPath, 'utf8').replace(/[ ]/g, '');
        return JSON.stringify(atlas);
    }

    return gulp.src(config.src+'spineData/*.json')
        .pipe(tap(function(file) {

            var path = file.path.split('/');
            var fullName = path.pop();
            var name = fullName.split('.')[0];
            path = path.join('/')+'/';

            var atlas = parseAtlas(path+name+'.atlas');
            var json = file.contents;

            file.contents = Buffer.concat([
                new Buffer("var app = (function(mod) { mod.pixi.spineData['"+name+"'] = {\n"),
                new Buffer("atlas: "+atlas+",\n"),
                new Buffer("json: "+json+"\n"),
                new Buffer("}; return mod; })(app || {});")
            ]);

        }))
        .pipe(uglifyJS('data.min.js', {
            outSourceMap: true,
            basePath: config.dest,
            sourceRoot: '/'
        }))
        .on('error', util.handleErrors)
        .pipe(gulp.dest(config.dest));

});

除了使用gulp.watch()之外,任务按预期工作。外部程序更改file.json,任务失败,并显示:

gulp-uglifyjs - UglifyJS threw an error
error: Unexpected token: punc (})

我猜这是在gulp.watch()文件被外部程序完全写入之前被调用的.json。这些是相当大的文件 - 目前大约有6000行。

我尝试在gulp-wait管道和tap管道之前添加延迟(使用uglify)但仍然始终以gulp.watch()失败。

0 个答案:

没有答案