不知什么时候开始,自家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 node
var 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
各位看官阔以看下。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。