不知什么时候开始,自家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
各位看官阔以看下。