infly-libs
Version:
工具组件库
70 lines (64 loc) • 2.42 kB
JavaScript
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
};