不知什么时候开始,自家github堆满了仓库代码。。。各种demo开头的项目,还有些空仓库,啥都没写的。自然,程序员写的最差的代码就是以前写的代码了,为了维护心中美好的光辉形象,我决定——————

不过,删除过程确实麻烦了些,身为“头脑简单,四肢发达” ,哦不对,“四肢简单,头脑发达”的程序员,怎么会甘心做苦力劳动呢?我决定搞个命令行批量执行下。

找到github API文档

要删除当然是要找API啦,不过,我开始想的是用puppeteer无头chrome搞的,后来发现直接有API,就直接用喽。
删除git仓库需要认证权限,我这里直接用Basic Auth验证,简单!Basic验证,简单说就是在请求头里,搞个Authorization:用户名:密码

命令行工具

必须是要美美的命令行优化工具啦,I pick这个inquirer。 有一些带颜色的终端字看着还是ok的,所以还带上了chalk这个库。

just do it

具体的代码,调用API,实在简单,看看就好:

#!/usr/bin/env nodevar inquirer = require('inquirer');var axios = require('axios');var chalk = require('chalk');var log = console.log;var api = {  user: async () => {    return await axios({      url: 'https://api.github.com/user',      method: 'GET',    });  },  repos: async () => {    return await axios({      url: 'https://api.github.com/user/repos',      method: 'GET',    });  },  deleteRepos: async (user, name) => {    return await axios({      method: 'DELETE',      url: `https://api.github.com/repos/${user}/${name}`,    });  },  login: async () => {    return await inquirer.prompt([      {        name: 'username',        message: 'username?'      },      {        name: 'password',        type: 'password',        message: 'password?'      }    ]);  },  listRepos: async (repos) => {    var list = [];    repos.forEach(v => {      var desc = v.description === null ? '' : v.description;      list.push({name: v.full_name + ' ' + desc});    });    return await inquirer.prompt([      {        type: 'checkbox',        name: 'rep',        message: 'select need cleared repos',        choices: list      }    ]);  }};(async () => {  var inf = await api.login();  var base64 = new Buffer.from(inf.username + ':' + inf.password).toString('base64');  axios.interceptors.request.use(config => {    config.headers = {      Authorization: 'Basic ' + base64    };    return config;  });  var user = await api.user();  log(`welcome ! ${chalk.green(user.data.name || user.data.login)}`);  var repos = await api.repos();  var selectRepos = await api.listRepos(repos.data);  for (var j = 0; j < selectRepos.rep.length; j++) {    var name = selectRepos.rep[j].indexOf(' ') === -1 ? selectRepos.rep[j] : selectRepos.rep[j].substring(0, selectRepos.rep[j].indexOf(' '));    await api.deleteRepos(user.data.login, name);  }  log(chalk.green('successfull!'));})();

npm打包发布

就这样打包,肯定不会有全局执行文件滴。

首先你需要在主执行的js的第一行写上

#!/usr/bin/env node

大家都知道,这是linux中指定文件执行解释器的意思,windows系统没用,但是配合上npm就有用啦,且先写着。

然后:在package.json中,敲下如下代码:

 "bin": {    "ngit": "index.js"  },

ngit说明全局执行命令叫ngit, index.js是执行文件。

ok,最后npm publish发布

npm install -g nodejs-github

再到cmd中,输入

ngit

就会直接执行代码啦,呼呼呼呼呼呼~~

github: https://github.com/chendonming/nodejs-github
npm: nodejs-github

各位看官阔以看下。