当前位置:   article > 正文

批量删除git分支脚手架_csdn博客

csdn博客

前言

在日常开发中我们每做一个功能需求就会创建一个git功能分支,时间久了本地和线上的分支就会被累积很多,那么此时有一个批量删除git分支的工具就显得尤为重要。GBKILL正是为了解决这一需求也生的工具,让你更加高效的删除git分支。 这篇文章主要讲述的是使用ink+react构建批量删除git分支Node Cli工具。

HANYIR)UFB09$SX0~CTK2WM.png

需求分析

在这里不再阐述脚手架的功能需求,可以通过需求规划进行查看

核心包介绍

在进行进行功能开发前,我们需要先了解一下会涉及到那些依赖包

  • ink 使用react构建cli的基础包
  • Commander: 强大的Node命令解析工具,其可以让我们更加简单的命令行参数
  • simple-git: 在Node的程序使用git命令
  • semver: version版本对比
  • downgrade-root: 尝试降级具有root权限的进程的权限
  • sudo-block: 阻止用户以 root 权限运行您的应用程序
  • url-join: 拼接并且序列化urls
  • figlet: 生成FIGfont字体
  • colors: 命令行输出样式

项目结构图

为了能更加清晰的了解到项目中每个文件所负责的功能以及整个项目的结构,我使用了drawio绘制了从初始化项目->命令注册->界面绘制的视图
gbkill.png

功能实现

项目初始化

因为这里我是基于react+ink来开发,因此可以通过其提供的create-ink-app脚手架来初始化项目模板并且选择指定typescrt类型。当然你也可以不选择他的模板自己主动创建一个,gbkill也是后面才加入ink因此也没有使用create-ink-app创建

npx create-ink-app --typescript gbkill
  • 1

配置package.json

如下几个参数特别在这里特别标注一下,其余的可以直接看源码配置即可

...
  "bin": {
    "gbkill": "./lib/index.js"  // 指定脚手架命令 -> 执行命令映射到./lib/index.js文件
  },
"scripts": {
    "build": "yarn run clean:build && npx tsc", // 打包命令
    "dev": "yarn run clean:build && npx tsc --watch",  // 开发命令,启动时清除lib文件编译ts文件为js文件
    "clean:build": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/clean-build.ts", // 通过脚本文件删除lib目录
 },
"files": [
    "lib", // 指定npm publish发布的文件,我们只需要把编译后的文件发布到npm社区中
],
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

入口文件声明(index.ts)

#! /usr/bin/env node是什么意思呢? 就是从环境变量获取到node、并且使用Node运行该文件。等价于在项目根目录执行node index.js命令。
当然我们也可以写成#! /usr/bin/node。这种写法是直接执行/usr/bin目录下的node,这种写法不推荐因为这样子就把node固定位置了。但每个人的node安装目录会有所不同,所以推荐上面的#! /usr/bin/env node写法

#!/usr/bin/env node

import main from './main.js';
main();
  • 1
  • 2
  • 3
  • 4

定义好入口时,执行yarn run dev启动项目编译将生成lib目录。此时有两种方式调试,
第一种: 使用terminal进入lib目录执行./index.js文件即可。
第二种: 在当前项目中使用npm link将该项目link到全局中,随后在terminal中执行gbkill即可

准备工作和命令监听入口(mian.ts)

项目初始化

采用微任务队列思维进行按顺序初始化

  init() {
    let chain = Promise.resolve();
    chain = chain.then(() => {
      this.actions = new Actions();
    });
    chain = chain.then(async () => await this.prepare()); // 前期准备、检查版本、降级ROOT用户
    chain = chain.then(() => this.registerCommand()); // 注册Command命令
    chain = chain.then(() => this.exitListener());   // 注册退出监听
    chain = chain.then(() => this.catchGlobalError()); // 捕获全局未知命令
    chain.catch(error => {
      console.log(colors.red(`
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/513038
推荐阅读
相关标签