起因

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

准备

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

  • JavaScript
  • NodeJs
  • GitHub API

并找到了一个极小的 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 = tokentoken = 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'))
})
复制代码

运行结果如下:

? 哈哈,成功得到了我们想要的结果。

封装成命令行工具

创建 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"))})
}
复制代码

再测试一下:

发布到 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 来提供建议(目前性能亟待优化)。

GitHub 仓库按大小排序相关推荐

  1. 【云笔记搭建】Visual Code + Github仓库 + Git

    0.前言 文章目录 0.前言 1.需要的工具 2.工具准备 2.1 Visual Code 2.2 Github仓库 1.自行注册账号 2.点击右上方新建仓库 3.填写仓库信息 4.获取仓库token ...

  2. iOS 【利用Markdown编辑GitHub仓库的README文件】

    最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编写README文件的同学们. README文件后缀名为md.md是markdown的缩写,markdown是一种编辑博客的语言 ...

  3. 给广大码农分享福利:一个业界良心的github仓库,中文计算机资料

    我今天查资料时无意发现的,https://github.com/CyC2018/CS-Notes 这个仓库包含了下列几个维度的计算机学习资料: 深受国内程序员喜爱,已经有超过3万多star了. 1. ...

  4. c++ssh连接_一步步使SSH连接您的github仓库

    我之前都是用HTTPS的方式从我的本地git客户端连接github仓库的,每次都要输入用户名和密码,觉得很麻烦. 于是想到尝试SSH的方法连接,省去每次输入用户名和密码的麻烦. 首先查看自己用户目录下 ...

  5. Python使用matplotlib可视化发散棒棒糖图、发散棒棒糖图可以同时处理负值和正值、并按照大小排序区分数据、为发散棒棒糖图的特定数据点添加标签、自定义背景填充色、自定义数据点颜色

    Python使用matplotlib可视化发散棒棒糖图.发散棒棒糖图可以同时处理负值和正值.并按照大小排序区分数据.为发散棒棒糖图的特定数据点添加标签.自定义背景填充色.自定义数据点颜色(Diverg ...

  6. Python使用matplotlib可视化发散型条形图、发散条形图(Diverging Bars)是一种可以同时处理负值和正值的条形图、并按照大小排序区分数据(Diverging Bars)

    Python使用matplotlib可视化发散型条形图.发散条形图(Diverging Bars)是一种可以同时处理负值和正值的条形图.并按照大小排序区分数据(Diverging Bars) 目录

  7. R语言ggplot2可视化发散型条形图、发散条形图(Diverging Bars)是一种可以同时处理负值和正值的条形图、并按照大小排序区分数据(Diverging Bars)

    R语言ggplot2可视化发散型条形图.发散条形图(Diverging Bars)是一种可以同时处理负值和正值的条形图.并按照大小排序区分数据(Diverging Bars) 目录

  8. Python使用matplotlib可视化发散型点图、发散型点图可以同时处理负值和正值、并按照大小排序区分数据、为发散型点图添加数值标签(Diverging Dot Plot )

    Python使用matplotlib可视化发散型点图.发散型点图可以同时处理负值和正值.并按照大小排序区分数据.为发散型点图添加数值标签(Diverging Dot Plot ) 目录

  9. 使用代码将github仓库里某个issue同步到CSDN博客上

    2019独角兽企业重金招聘Python工程师标准>>> 我是一个懒惰的程序员.我在github仓库里用issue的方式写了很多分享文章,想同步到CSDN上.但是我又不想一篇篇手动复制 ...

最新文章

  1. java length 使用方法 例题_java.util.BitSet.length()方法实例
  2. Mozilla网站安全分析工具Observatory已发布
  3. 读完这些论文和代码,你就能在搜狐算法大赛中获得好成绩了
  4. Cython——[FutureWarning: Cython directive ‘language_level’ not set, using 2 for now (Py2)]解决方案
  5. 河北大学计算机在哪学,河北大学计算机科学与技术学院
  6. 安装JDK以及配置Java运行环境
  7. Resource Hacker+mysql安装会出现错误“应用程序无法启动因为应用程序的并行配置不正确”...
  8. Android开发人员必备的10 个开发工具
  9. 华三基础命令(单臂,超级vlan,远程,聚合)
  10. Chartboost-x新鲜出炉: C++ Wrapper of Chartboost for Cocos2d-x
  11. python中拼音怎么用_Python 中拼音库 PyPinyin 的用法【华为云技术分享】
  12. 使用记账软件记录生活收支明细,如何防止收支不被他人修改
  13. 浅谈5G网络及其应用
  14. $nextTick 是干什么的
  15. Android超简单时间轴的实现
  16. 台式计算机32位和64位的区别,电脑系统32位和64位有哪些区别 32位和64位是什么意思 【详解】...
  17. 设计模式(10)--蝇量模式
  18. 联想服务器怎么安装linux虚拟机,ThinkServer RS260安装CentOS操作实录
  19. 国产麒麟命令更新软件
  20. chunked java_java – 如何正确使用ChunkedStream

热门文章

  1. Stream 和Byte[] 之间的转换
  2. testInt转换成字符串
  3. UA MATH567 高维统计专题1 稀疏信号及其恢复4 Basis Pursuit的算法 Projected Gradient Descent
  4. C# switch嵌套语法
  5. Linux下首次操作MySQL失败
  6. ArcGIS Engine 开发中用到的一些命名空间和类
  7. Set 的合集 并集 差集
  8. jQuery的ajax的post请求json格式无法上传空数组
  9. WPF之坑——ICommandSource与RoutedUICommand
  10. Reveal:分析iOS UI该武器