cocos-enhance-kit/engine/gulp/tasks/watch.js
2022-06-25 00:23:03 +08:00

108 lines
2.8 KiB
JavaScript

var Watchify = require('watchify');
var Browserify = require('browserify');
var Fs = require('fs');
var Path = require('path');
var through = require('through');
var Engine = require('./engine');
// var source = require('vinyl-source-stream');
// var buffer = require('vinyl-buffer');
// var sourcemaps = require('gulp-sourcemaps');
function watchFile(opts) {
var bundler = new Browserify(opts.entries, {
cache: {},
packageCache: {},
debug: true,
detectGlobals: false, // dont insert `process`, `global`, `__filename`, and `__dirname`
bundleExternal: false, // dont bundle external modules
plugin: [Watchify]
});
bundler.on('update', bundle);
if (opts.skips) {
var skips = opts.skips;
for (var i = 0; i < skips.length; ++i) {
var file = require.resolve(skips[i]);
bundler.ignore(file);
}
}
function bundle() {
var name = new Date().toTimeString() + ' : browserify for ' + opts.dest + '. ';
console.time(name);
// append prefix to index.js
var prefix = '';
if (opts.prefix) {
if (typeof opts.prefix === 'function') {
prefix = opts.prefix();
}
else if (typeof opts.prefix === 'string') {
prefix = opts.prefix;
}
}
bundler.transform(function (file) {
var data = '';
if (Path.basename(file) === 'index.js') {
data += prefix;
}
return through(write, end);
function write (buf) { data += buf; }
function end () {
this.queue(data);
this.queue(null);
}
return;
});
// do bundle
var b = bundler.bundle();
b.on('end', function () {
console.timeEnd(name);
});
b = b.pipe(Fs.createWriteStream(opts.dest));
// fixed chinese character in source maps
// b = b.pipe(source(Path.basename(opts.dest)))
// .pipe(buffer())
// .pipe(sourcemaps.init({loadMaps: true}))
// .pipe(sourcemaps.write('./'))
// .pipe(gulp.dest(Path.dirname(opts.dest)));
return b;
}
return bundle();
}
exports.preview = function (sourceFile, outputFile) {
return watchFile({
entries: sourceFile,
dest: outputFile,
prefix: 'CC_DEV = true;\n'
});
};
exports.jsbPolyfill = function (sourceFile, outputFile) {
return watchFile({
entries: sourceFile,
dest: outputFile,
prefix: function () {
var prefix = 'CC_DEV = true;\n';
prefix += 'CC_JSB = true;\n';
return prefix;
},
skips: Engine.jsbSkipModules
});
};