version_generator.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. var fs = require('fs');
  2. var path = require('path');
  3. var crypto = require('crypto');
  4. var manifest = {
  5. packageUrl: 'https://xcx-box.oss-cn-hangzhou.aliyuncs.com/hotgame/HundredsOfMillions/remote-assets/',
  6. remoteManifestUrl: 'https://xcx-box.oss-cn-hangzhou.aliyuncs.com/hotgame/HundredsOfMillions/remote-assets/project.manifest',
  7. remoteVersionUrl: 'https://xcx-box.oss-cn-hangzhou.aliyuncs.com/hotgame/HundredsOfMillions/remote-assets/version.manifest',
  8. version: '1.0.0',
  9. assets: {},
  10. searchPaths: []
  11. };
  12. var dest = './remote-assets/';
  13. var src = './jsb/';
  14. // Parse arguments
  15. var i = 2;
  16. while ( i < process.argv.length) {
  17. var arg = process.argv[i];
  18. switch (arg) {
  19. case '--url' :
  20. case '-u' :
  21. var url = process.argv[i+1];
  22. manifest.packageUrl = url;
  23. manifest.remoteManifestUrl = url + 'project.manifest';
  24. manifest.remoteVersionUrl = url + 'version.manifest';
  25. i += 2;
  26. break;
  27. case '--version' :
  28. case '-v' :
  29. manifest.version = process.argv[i+1];
  30. i += 2;
  31. break;
  32. case '--src' :
  33. case '-s' :
  34. src = process.argv[i+1];
  35. i += 2;
  36. break;
  37. case '--dest' :
  38. case '-d' :
  39. dest = process.argv[i+1];
  40. i += 2;
  41. break;
  42. default :
  43. i++;
  44. break;
  45. }
  46. }
  47. function readDir (dir, obj) {
  48. var stat = fs.statSync(dir);
  49. if (!stat.isDirectory()) {
  50. return;
  51. }
  52. var subpaths = fs.readdirSync(dir), subpath, size, md5, compressed, relative;
  53. for (var i = 0; i < subpaths.length; ++i) {
  54. if (subpaths[i][0] === '.') {
  55. continue;
  56. }
  57. subpath = path.join(dir, subpaths[i]);
  58. stat = fs.statSync(subpath);
  59. if (stat.isDirectory()) {
  60. readDir(subpath, obj);
  61. }
  62. else if (stat.isFile()) {
  63. // Size in Bytes
  64. size = stat['size'];
  65. md5 = crypto.createHash('md5').update(fs.readFileSync(subpath)).digest('hex');
  66. compressed = path.extname(subpath).toLowerCase() === '.zip';
  67. relative = path.relative(src, subpath);
  68. relative = relative.replace(/\\/g, '/');
  69. relative = encodeURI(relative);
  70. obj[relative] = {
  71. 'size' : size,
  72. 'md5' : md5
  73. };
  74. if (compressed) {
  75. obj[relative].compressed = true;
  76. }
  77. }
  78. }
  79. }
  80. var mkdirSync = function (path) {
  81. try {
  82. fs.mkdirSync(path);
  83. } catch(e) {
  84. if ( e.code != 'EEXIST' ) throw e;
  85. }
  86. }
  87. // Iterate assets and src folder
  88. readDir(path.join(src, 'src'), manifest.assets);
  89. readDir(path.join(src, 'assets'), manifest.assets);
  90. var destManifest = path.join(dest, 'project.manifest');
  91. var destVersion = path.join(dest, 'version.manifest');
  92. mkdirSync(dest);
  93. fs.writeFile(destManifest, JSON.stringify(manifest), (err) => {
  94. if (err) throw err;
  95. console.log('Manifest successfully generated');
  96. });
  97. delete manifest.assets;
  98. delete manifest.searchPaths;
  99. fs.writeFile(destVersion, JSON.stringify(manifest), (err) => {
  100. if (err) throw err;
  101. console.log('Version successfully generated');
  102. });