实现效果
在终端输入命令yarn merge test dev,自动将git的dev分支的代码合并到test。
这只是一个简单的例子,介绍一下代码中几个依赖工具的简单使用,可以使用类似方法实现代码合并、项目发布等需求。
准备
1、在根目录创建文件scripts/merge.js
2、在package.json中的scripts添加"merge": "node scripts/merge.js"
实现代码
也就是scripts/merge.js文件中的代码
记得安装相关依赖:
minimist:命令行参数解析
chalk:控制台输出
enquirer:交互式询问CLI
execa:执行命令
import minimist from 'minimist';// 命令行参数解析
import chalk from 'chalk';// 控制台输出
import pkg from 'enquirer';// 交互式询问CLI
const { prompt } = pkg;
import { execa } from 'execa';// 执行命令
const args = minimist(process.argv.slice(2))// 命令行参数解析
const targetBranch = args._[0];// 目标分支
const mergeBranch = args._[1];// 合并分支
// 控制台输出
const step = msg => console.log(chalk.cyan(msg))
// 执行命令
const run = (bin, args = [], opts = {}) => {
console.log(chalk.blue(`[执行命令] ${bin} ${args.join(' ')}`));
return execa(bin, args, { stdio: 'inherit', ...opts });
}
// 执行合并命令
async function executeMerge(target, branch) {
// 切换到合并目标分支
step(`正在切换到目标分支“${target}”...`);
await run('git', ['checkout', target]);
// 拉取
step(`正在拉取远程代码...”`);
await run('git', ['pull']);
// 合并
step(`正在合并代码...”`);
await run('git', ['merge', branch]);
// 推送
step(`正在推送...”`);
await run('git', ['push']);
// 切换回原分支
step(`正在切换回原分支“${branch}”...`);
await run('git', ['checkout', branch]);
}
async function main() {
if (!targetBranch || !mergeBranch) {
console.log(chalk.red('请传入目标或合并分支'))
return;
}
const { confirm } = await prompt({
type: 'select',
name: 'confirm',
message: `确定将“${mergeBranch}”分支合并到“${targetBranch}”分支?`,
choices: ['取消', '确定']
})
if (confirm === '取消') {
return;
}
executeMerge(targetBranch, mergeBranch)
}
try {
main()
} catch (err) {
console.log(chalk.red(err))
}