UNPKG

hpmo

Version:

hybirdApp package manager

89 lines (77 loc) 2.73 kB
/** * * hpm init * @namespace hpm * @author 仈爪 <haibin.zhb@alipay.com> * @version 1.0.0 * * */ var fs = require('fs-extra'), colors = require('colors'), file = require('./sdk/file'), path = require('path'); module.exports = function (options) { var old_hpmfile = file.readJSON('hpmfile.json', false); var hpmfile = file.readJSON(path.join(options.tplpath, 'hpmfile.json'), false); if (old_hpmfile) { if (!options.id && old_hpmfile.appid) { options.id = old_hpmfile.appid; } for (var k in old_hpmfile) { if (!('support' == k && !!old_hpmfile[k]['platform'])) hpmfile[k] = old_hpmfile[k]; } } if (!options.id) { console.error('ERROR: '.red + 'appid'.yellow + ' cannot be empty! please init with '.red + '-i'.yellow + ' option'.red); return false; } //如果当前已经存在老的hpmfile,则不再重新生成模版 if (!old_hpmfile) { copySync(options, options.tplpath, process.cwd(), [/debug\.js$/, /^alipay\.js$/]); } options.id && (hpmfile.appid = options.id); options.name && (hpmfile.name = options.name); options.version && (hpmfile.version = options.version); if (hpmfile.host) { for (var k in hpmfile.host) { if ("string" == typeof(hpmfile.host[k])) { hpmfile.host[k] = hpmfile.host[k].replace("{{appid}}", hpmfile.appid); } } } file.writeJSON('hpmfile.json', hpmfile); console.log('# ' + 'H5App init success!'.green); }; // 复制文件或目录, follow src中的符号链接 // dst只能是目标本身, 而非目标所在目录; 已存在的dst不会被替换 // copy时文件整个读到内存 // 没有考虑符号链接无穷递归的情况 function copySync(option, src, dst, ignores) { var dir = path.dirname(src); var stats = fs.lstatSync(src); if (stats.isSymbolicLink()) { return copySync(option, path.resolve(dir, fs.readlinkSync(src)), dst, ignores); } if (stats.isDirectory()) { if (!fs.existsSync(dst)) { fs.mkdirsSync(dst); } fs.readdirSync(src).forEach(function (name) { for (var i = 0; i < (ignores || []).length; ++i) { if (ignores[i].test(name)) { return; } } copySync(option, path.join(src, name), path.join(dst, name), ignores); }); } else { var dstDir = path.dirname(dst); if (!fs.existsSync(dstDir)) { fs.mkdirsSync(path.dirname(dst)); } if (!fs.existsSync(dst)) { fs.writeFileSync(dst, fs.readFileSync(src)); } } }