var fs = require('fs'); var path = require('path'); var crypto = require('crypto'); var manifest = { packageUrl: 'http://localhost/tutorial-hot-update/remote-assets/', remoteManifestUrl: 'http://localhost/tutorial-hot-update/remote-assets/project.manifest', remoteVersionUrl: 'http://localhost/tutorial-hot-update/remote-assets/version.manifest', version: '1.0.0', assets: {}, searchPaths: [] }; var dest = '/packages-hot-update/manifest/'; var src = './build/jsb-link/src'; // 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]; i += 2; 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; } } const fetch = require('node-fetch'); const url1 = 'https://jenkins.black-art.cn/view/all/job/b22_client_android/lastBuild/buildNumber'; const username = 'lanyunfei'; const password = 'bend2690'; const auth = 'Basic ' + Buffer.from(username + ':' + password).toString('base64'); fetch(url1, { method: 'GET', headers: { 'Authorization': auth } }) .then(response => { if (!response.ok) { throw new Error('Network response was not ok ' + response.statusText); } return response.text(); }) .then(data => { console.log('Build Number:', data); let buildNumber = manifest.version == '0.0.0' ? '0' : process.env.BUILD_NUMBER manifest.version = '1.' + data + '.' + buildNumber // Iterate assets and src folder readDir(path.join(src, 'src'), manifest.assets); readDir(path.join(src, 'assets'), 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'); }); }) .catch(error => { console.error('There was a problem with the fetch operation:', error); });