GitHub 堆栈按大小排序

《GitHub 堆栈按大小排序》

原由

  关于代码初学者来说,GitHub 是一个很好的网站。在这里,他们能够进修怎样更好地写代码并进步代码才能,进修编码范例,种种框架……
  但是关于像我一下的初学者来说,有时候不知道要怎样从 GitHub 的优异项目中进修、要从何最先浏览源码。
  所以我想到了一个要领: 将本身 star 过的一切优异项目按堆栈大小( 代码量 )举行排序,从代码量小的项目最先研讨,逐渐提拔代码才能。

预备

想好了项目标目标,列出以下几种须要用到的手艺:

并找到了一个极小的 GitHub API 封装东西: gh.js

最先

装置项目依靠包

# 初始化项目
npm init 

npm install gh.js # 封装过的 GitHub API
npm install chalk # 美化终端命令行东西的字体色彩
npm install ora   # 文雅的终端加载条

建立项目进口 index.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

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'))
})

运转效果以下:

《GitHub 堆栈按大小排序》

😈 哈哈,胜利得到了我们想要的效果。

封装成命令行东西

建立 bin/sort-starred-by-size:


const ora = require('ora')
const chalk = require('chalk')
const spinner = ora('Sorting...')
spinner.start()

if (!process.argv[2]) {
  spinner.stop()
  console.log(chalk.green('sort-starred-by-size ~ ' + require('../package').version))
  console.log(chalk.gray('Sort your personal starred repos by size in command line.'))
  console.log(chalk.cyan('  $ ') + 'sort-starred-by-size torvalds')
  console.log(chalk.cyan('  $ ') + 'sort-starred-by-size ZYSzys')

  return
} else {
  const username = process.argv.slice(2).join('')
  const sort = require('..')
  sort(username, (err, repos) => {
    spinner.stop()
    console.log(err || repos.map(function(c) {
      return `${c.full_name} => ` + chalk.red(`${c.size}`) + `kb`
    }).join("\n"))
  })
}

再测试一下:

《GitHub 堆栈按大小排序》

宣布到 npm

package.json 中增加 bin 字段:

  "bin": {
    "sort-starred-by-size": "./bin/sort-starred-by-size"
  },

宣布到 npmjs.com:

npm publish

今后经由过程 npm install -g sort-github-stars-size 装置本模块后,就可以经由过程 sort-starred-by-size username 来对已 star 的 GitHub堆栈举行按代码量从小到大排序了。

项目完全地点: sort-github-stars-size

迎接 PRissue 来供应发起(现在机能亟待优化)。

    原文作者:ZYSzys
    原文地址: https://segmentfault.com/a/1190000016083237
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞