@fxext/cli
Version:
fanxing miniapp cli
59 lines (54 loc) • 2.27 kB
JavaScript
const log = require('./log');
const { parseProjectConfig } = require('./utils');
const path = require('path');
const glob = require('glob');
const fs = require('fs-extra');
const archiver = require('archiver');
async function main() {
try {
const ROOT = process.cwd();
const projectConfig = await parseProjectConfig(ROOT);
const { releasePath, name: projectName, builder } = projectConfig;
const { buildConfig } = builder;
const releaseDir = path.resolve(releasePath, projectName);
const releaseZip = path.resolve(releasePath, `${projectName}.zip`);
// 清空原有目录文件
fs.removeSync(releaseZip);
fs.removeSync(releaseDir);
fs.ensureDirSync(releaseDir);
log.hint('开始打包源码...');
const fileList = glob.sync('**', {
ignore: ['node_modules/**', 'dist/**', 'streamer_pc', 'm', 'release/**', '.git/**', '.gitignore', '*/.gitignore', '*/library/**', '*/local/**', '*/build/**', '*/temp/**', '.idea/**', '.vscode/**', '.DS_Store', '**.bat', '**.sh', '**.exe'],
dot: true,
});
fileList.forEach(file => {
fs.copySync(file, path.join(releaseDir, file));
});
for (const item of buildConfig) {
const { framework, layoutType } = item;
const layoutTypeReleaseDir = path.join(releaseDir, layoutType);
if (framework === 'cocos' && fs.existsSync(path.join(layoutTypeReleaseDir, 'project.json'))) {
// 复制cocos构建用的模板文件
const buildTemplatePath = path.join(__filename, '../template/cocos/');
fs.copySync(buildTemplatePath, layoutTypeReleaseDir);
}
}
const zipFile = new Promise((resolve, reject) => {
const output = fs.createWriteStream(releaseZip);
const archive = archiver('zip', { zlib: { level: 9 } });
output.on('close', resolve);
archive.on('warning', err => (err.code === 'ENOENT' ? console.log(err) : reject(err)));
archive.on('error', reject);
archive.pipe(output);
archive.directory(releaseDir, projectName);
archive.finalize();
});
await zipFile;
log.hint('打包源码完成');
log.hint('现在可以上传到开放平台');
} catch (error) {
log.error('打包失败!\n');
log.error(error);
}
}
module.exports = main;