原由
关于代码初学者来说,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 = 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'))
})
运转效果以下:
😈 哈哈,胜利得到了我们想要的效果。
封装成命令行东西
建立 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
迎接 PR 或 issue 来供应发起(现在机能亟待优化)。