pubgv3/version_generator.js
guoqing.zhu 2181830443 update
2022-06-16 11:41:35 +08:00

131 lines
3.1 KiB
JavaScript

var fs = require('fs');
var path = require('path');
var crypto = require('crypto');
var url = 'https://www.cebg.games/pubgv4/';
// var url = 'https://test.kingsome.cn/game2006/test/';
var manifest = {
packageUrl: url,
remoteManifestUrl: url + 'project.manifest',
remoteVersionUrl: url + 'version.manifest',
version: '0.1.0',
assets: {},
searchPaths: [],
};
var dest = './hotupdate/';
var src = './build/jsb-link/';
// Parse arguments
var i = 2;
while (i < process.argv.length) {
var arg = process.argv[i];
switch (arg) {
case '--url':
case '-u':
var url = process.argv[i + 1];
manifest.packageUrl = url;
manifest.remoteManifestUrl = url + 'project.manifest';
manifest.remoteVersionUrl = url + 'version.manifest';
i += 2;
break;
case '--version':
case '-v':
manifest.version = process.argv[i + 1];
// manifest.packageUrl = url + manifest.version + "/";
// manifest.remoteManifestUrl =
// url + manifest.version + "/" + "project.manifest";
// manifest.remoteVersionUrl =
// url + manifest.version + "/" + "version.manifest";
i += 2;
// console.log(manifest);
break;
case '--src':
case '-s':
src = process.argv[i + 1];
i += 2;
break;
case '--dest':
case '-d':
dest = process.argv[i + 1];
i += 2;
break;
default:
i++;
break;
}
}
function readDir(dir, obj) {
var stat = fs.statSync(dir);
if (!stat.isDirectory()) {
return;
}
var subpaths = fs.readdirSync(dir),
subpath,
size,
md5,
compressed,
relative;
for (var i = 0; i < subpaths.length; ++i) {
if (subpaths[i][0] === '.') {
continue;
}
subpath = path.join(dir, subpaths[i]);
stat = fs.statSync(subpath);
if (stat.isDirectory()) {
readDir(subpath, obj);
} else if (stat.isFile()) {
// Size in Bytes
size = stat['size'];
md5 = crypto
.createHash('md5')
.update(fs.readFileSync(subpath))
.digest('hex');
compressed = path.extname(subpath).toLowerCase() === '.zip';
relative = path.relative(src, subpath);
relative = relative.replace(/\\/g, '/');
relative = encodeURI(relative);
obj[relative] = {
size: size,
md5: md5,
};
if (compressed) {
obj[relative].compressed = true;
}
}
}
}
var mkdirSync = function (path) {
try {
fs.mkdirSync(path);
} catch (e) {
if (e.code != 'EEXIST') throw e;
}
};
// Iterate assets and src folder
readDir(path.join(src, 'src'), manifest.assets);
readDir(path.join(src, 'res'), manifest.assets);
// readDir(path.join(src, 'jsb-adapter'), manifest.assets);
var destManifest = path.join(dest, 'project.manifest');
var destVersion = path.join(dest, 'version.manifest');
mkdirSync(dest);
fs.writeFile(destManifest, JSON.stringify(manifest), (err) => {
if (err) throw err;
console.log('Manifest successfully generated');
});
delete manifest.assets;
delete manifest.searchPaths;
fs.writeFile(destVersion, JSON.stringify(manifest), (err) => {
if (err) throw err;
console.log('Version successfully generated');
});