UNPKG

infly-libs

Version:

工具组件库

70 lines (64 loc) 2.42 kB
const fs = require("fs"); const path = require("path"); const { execSync } = require("child_process"); // 读取配置文件 const projectRoot = process.cwd().replace(/\\node_modules.*$/g, ""); const projectPkgPath = path.resolve(projectRoot, "package.json"); const config = JSON.parse(fs.readFileSync(projectPkgPath, "utf-8")); const { projectConfig } = config || {}; const { autoCloneProject, gitBranch, baseGitUrl } = projectConfig || {}; function cloneRepository(url, branch, targetDir) { try { execSync(`git clone -b ${branch} ${url} ${targetDir}`); console.log(global.logColor.success, `✅ 项目克隆成功: ${path.basename(targetDir)}`); } catch (err) { console.error(global.logColor.error, `❌ 项目克隆失败: ${url} ${err.message}`); } } /** * 批量克隆项目 * @param {Array} projects * @returns * @description * eg: package.json * { "name": "postal-benefits-monorepo", "version": "1.0.0", "private": true, "projectConfig": { "autoCloneProject": true, "gitBranch": "master", "baseGitUrl": "https://gitee.com/gdinfly_1/" }, "workspaces": [ "apps/postal-benefits-platform", "apps/postal-benefits-platform-merchant", "apps/postal-benefits-platform-level" ] } * */ function batchCloneProject(projects = config.workspaces || [], autoClone = autoCloneProject) { if (typeof autoClone === "boolean" && !autoClone) { process.exit(0); } if (autoClone) { if (!Array.isArray(projects) || projects.length === 0) { console.log(global.logColor.warning, "⚠️ 没有可克隆的项目或配置错误。"); process.exit(1); } console.log(global.logColor.success, `🚀 项目克隆开始 =======>`); projects.forEach((repo = "") => { const [targetFileDir = "", projectName = ""] = repo.split("/"); const repoUrl = baseGitUrl + projectName + ".git"; const targetDir = path.resolve(projectRoot, repo); cloneRepository(repoUrl, gitBranch, targetDir); }); console.log(global.logColor.success, `🚀 项目克隆完成 =======>`); process.exit(0); } } module.exports = { cloneRepository, batchCloneProject };