GitHub 仓库按大小排序

## 起因

  对于代码初学者来说,`GitHub` 是一个很好的网站。在这里,他们可以学习如何更好地写代码并提高代码能力,学习编码规范,各种框架......  
  然而对于像我一下的初学者来讲,有时候不知道要如何从 `GitHub` 的优秀项目中学习、要从何开始阅读源码。  
  所以我想到了一个方法: **将自己  `star` 过的所有优秀项目按仓库大小(** **代码量** **)进行排序**,从代码量小的项目开始研究,逐步提升代码能力。

<!--more-->

## 准备

想好了项目的目的,列出以下几种需要用到的技术:  

* JavaScript  
* NodeJs  
* [GitHub API](https://developer.github.com/v3/)

并找到了一个极小的 `GitHub API` 封装工具: [gh.js](https://github.com/IonicaBizau/gh.js)。

## 开始

### 安装项目依赖包

```sh
# 初始化项目
npm init 

npm install gh.js # 封装过的 GitHub API
npm install chalk # 美化终端命令行工具的字体颜色
npm install ora   # 优雅的终端加载条
```

### 创建项目入口 `index.js`

```js
const GitHub = require('gh.js')

/**
 * sortByStarredSize
 * Sort your personal starred repos by size.
 *
 * @name sortByStarredSize
 * @function
 * @param {String} username The GitHub username.
 * @param {String} token An optional access token.
 * @param {Function} callback The callback function.
 * @return {gh.js} The `gh.js` instance.
 */
function sortByStarredSize (username, token, callback) {
  if (typeof token === 'function') {
    callback = token
    token = undefined
  }

  const gh = new GitHub({ token: token })
  gh.get(`users/${username}/starred`, { all: true }, (err, repos) => {
    if (err) { return callback(err) }
    repos.sort(function (a, b) {
      return a.size > b.size ? 1 : -1
    })
    callback(null, repos)
  })

  return gh
}

module.exports = sortByStarredSize
```

### 创建测试样例 `example.js`

```js
const sortGhStarredSize = require('.')

// 以大神 Linus Torvalds 的GitHub用户名torvalds为例
const username = 'torvalds'

sortGhStarredSize(username, (err, repos) => {
  console.log(err || repos.map(function(c) {
    return `${c.full_name} => ${c.size} kb`
  }).join('\n'))
})
```

运行结果如下:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值