我编写了一个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()
失败。