为什么GitHub是编码初学者的好网站。在这里,他们可以学习如何更好地编写代码和提高自己的编码能力,学习编码标准、各种框架……但是,对于像我这样的初学者,有时他们不知道如何从GitHub的优秀项目中学习,从哪里学习开始阅读源代码。于是我想到了一个方法:把我关注的优秀项目全部按仓库大小(代码量)排序,从代码量小的项目开始研究,逐步提升代码能力。准备思考项目的目的,列出了以下需要用到的技术:JavaScriptNodeJsGitHubAPI并找到了一个非常小的GitHubAPI打包工具:gh.js。开始安装项目依赖包#初始化项目npminitnpminstallgh.js#打包GitHubAPInpminstallchalk#美化终端命令行工具的字体颜色npminstallora#创建一个带有优雅终端加载栏索引的项目入口。jsconstGitHub=require('gh.js')/***sortByStarredSize*按大小对您个人加星号的回购进行排序。**@namesortByStarredSize*@function*@param{String}用户名GitHub用户名。*@param{String}token一个可选的访问令牌。*@param{Function}callback回调函数。*@return{gh.js}`gh.js`实例。*/functionsortByStarredSize(username,token,callback){if(typeoftoken==='function'){callback=tokentoken=undefined}constgh=newGitHub({token:token})gh.get(`用户/${username}/starred`,{all:true},(err,repos)=>{if(err){returncallback(err)}repos.sort(function(a,b){returna.size>b.size?1:-1})callback(null,repos)})returngh}module.exports=sortByStarredSize创建测试示例example.jsconstsortGhStarredSize=require('.')//以LinusTorvalds的GitHub用户名torvalds为例constusername='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:constora=require('ora')constchalk=require('chalk')constspinner=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('在命令行中按大小对你个人加星标的回购进行排序。'))console.log(chalk.cyan('$')+'按大小排序torvalds')console.log(chalk.cyan('$')+'按大小排序ZYSzys')return}else{constusername=process.argv.slice(2).join('')constsort=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"))})}再次测试:发布到npmpackage.json中添加bin字段:"bin":{"sort-starred-by-size":"./bin/sort-starred-by-size"},publishedtonpmjs.com:在npmpublish之后,通过npminstall-gsort-github-stars-size安装这个模块之后,它将可以通过排序-starred-by-size用户名,将加星号的GitHub仓库按代码量从小到大排序,完整项目地址:sort-github-stars-size欢迎PR或issue提供建议(当前性能急需优化)。
