UNPKG

@fxext/cli

Version:

fanxing miniapp cli

59 lines (54 loc) 2.27 kB
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;