关于高产,不得不提到的一位就是 Sindre Sorhus 大神,截止到写这句话为止,Sindre Sorhus 一共在 npm 上发布了 1123 个包(你看我都不敢说“截止到写这篇文章为止”), 在 Users Ranking - Gitstar Ranking 中能够看到用户得到star数量的排名,高居第一而且几乎是第二名的三倍,以下图:node
什么?你说你没用他的包,那你真应该去翻翻大家公司项目的直接或间接依赖。在 Discover your ranking on GitHub 中能够看到 Discover your ranking on GitHub 关于 JavaScript 的排名,世界第13:webpack
介绍了一位国外小哥以后,我再给你们介绍一位国内小哥,能够说接下来要介绍的这我的是个人精神领袖:EGOIST 。固然啦这是他的网名不是真实姓名,可能有的同窗压根就没听过,也不奇怪,由于他在国外的知名度确实比在国内还高,上图:git
感觉到了别人的生产力以后,你有想过为何吗?程序员
之因此上面提到的两位被承认,不只仅是他们高产似母猪,更重要的缘由是:他们的做品在质量上是绝对“生产友好”的,换句话说他们的做品让别人以为用起来靠谱,做品靠谱的本质是人靠谱。github
人的因素咱们不谈,咱们来谈一下如何让做品变的靠谱。假设如今的你在看到上面两位以后早已变得热血沸腾,巴不得立马发个包到 npm
,惋惜你只是建立了一个 README
而已,殊不知接下来该怎么作,不要紧让咱们一步一步来。web
首先你要保证代码风格统一,并附以质量控制,这时候你开始找到 eslint
/ tslint
求助,通过你无数次的敲击键盘、安装依赖、翻查文档你终于搭建了一个你以为还ok的架子。npm
接着你发现 prettier
对你来讲是个好东西,因而你又经历了一次敲击键盘、安装依赖、翻查文档,不过好在你成功的把 prettier
集成到你的项目中了。工具
这还没完,你忽然想要实现一个功能,你但愿当文件被保存时自动 fix
代码风格,因而你找到了一个 vscode
插件,但你只想该插件做用域当前项目,因而你又开始了 敲击键盘、安装依赖、翻查文档......单元测试
接着你发现了新的问题,假如别的开发者没有使用用来格式化代码的vscode插件或者压根没用vscode的时候怎么办?这时别人是能够提交“脏”代码的,因而你开始但愿在 commit 以前经过 git hook 可以完成自动格式化代码的工做,因而你转而求助于 husky 和 lint-staged 等工具,你再次经历敲击键盘、安装依赖、翻查文档。学习
好景不长,commit 这个关键词让你想起来另外一个问题,那就是对于 commit msg 的校验,由于你想让你的项目变得专业,因此你但愿你的全部 commit msg 都符合必定的规范,因而你开始想办法校验 commit 信息,不过好在你的无敌三连“敲击键盘、安装依赖、翻查文档”足够强大,你最终搞定了。
当你发现你的 commit 规范化了以后,你又产生了疑惑,既然 commit msg 已经规范了,那么若是能自动生成或以交互式的方式填写 commit msg 就更好了,因而你开始求助于 commitizen 和 cz-conventional-changelog 等工具,虽然此时你已经满头大汗,但你不想就此放弃你仍是坚持着把他们集成到了你的项目中。
你擦了擦额头,当你冰凉的手背触碰到你额头的一刹那,你又产生了一个新的想法:咦,既然 commit msg 规范了,是否是能够经过 commit msg 自动生成 changelog 呢?因而你喝了一口咖啡,准备去拜访 conventional-changelog-cli 。
至此,你的项目在规范化和代码风格质量上的保证有了必定的转机,可是这就是优秀的项目了吗?不,这只是漂亮的外壳而已,优秀项目的内在必定是经过单元测试(或E2E,因为是纯js项目为主,因此不提E2E)保证的。因而你又开始了集成单测之路,在一开始你就遇到了一个小问题,你不知道使用哪一个测试库好,通过你一些列的调查,你发现你最喜欢的两个测试库是 jest 和 ava ,可是无论选择哪一个,你老是要集成进来,因而你又亮出了你的大招:无敌三连。
既然测试都已经集成了,那顺便生成测试覆盖率报告呗,在集成一下 CI 工具,你发现你的无敌三连虽然强大,可是天色已经见晚了,你家里的女友还在等你....,抱歉我忘记了你没有女友。
到了这里,一个项目的雏形就算是有了,不过你却忘记了一个直观重要的东西:编译。你的项目是准备为何环境提供的?node 仍是 web,环境的具体状况如何,你的代码是否须要编译,若是编译的话是用 rollup 仍是 webpack?假设你开发的是纯 js 项目,并认为 rollup 更适合一些,你把 rollup 集成了进来。
通过一些列的战斗,你仍是以为差点什么,你开始纠结于 README 该怎么写,你开始查看各大开源项目的 README,企图借鉴,你开始处处收集 badges ,例如
。最后你拼装了一个还看得过去的内容,你终于认为你的项目及格了。忽然,你收到的一条来自你女友的短信:“今晚不用回来了”,抱歉我又忘了你没有女友了......
虽然你没有女友或者你女友和你分手了,可是你仍是很开心,由于你有一个及格的项目了,你在回家的路上忧喜参半。
次日你思路爆棚,老子又有一个惊天地泣鬼神的项目了,那么大哥冷静一下,我问你个问题:“上面的那些流程你是准备从新走一遍,仍是把第一个项目copy过去改一改?”。若是你重走一遍,恭喜你,你除了对工具的集成熟练度以外可能没什么提高,若是你copy修改的话,你却发现第一个项目除了那些基本内容以外还用了不少本身的依赖和工具,你苦于修改。
并且你是使用 jest 仍是 ava 编写测试用例的代码是不太同样的,最重要的是,是否须要编译将影响你编写 jest 测试代码的方式,诸如此类细枝末节的东西,你要考虑不少。
咳咳,接下来就是广告时间,为了不以上问题,咱们可不能够开发一个模板,而后每次建立新项目的时候都使用这个模板以交互式的方式来初始化?固然能够,有的同窗可能早就用过 Generators | Yeoman 了。但我这里给大家推荐我更喜欢的项目:saojs/sao 。
我编写了一个用于初始化项目的SAO Generator:sao-hcy-nm
每次当你新建项目的时候均可以使用命令 sao hcy-nm
,你将会以交互式的方式来根据你的意愿建立新项目的模板,并具备本篇文章提到和没提到的全部特性,以下是一个截图:
支持以下特性:
如今,你的生活水平基本脱贫了,想要达到小康水平,那么还应该继续向 Sindre Sorhus 和 EGOIST 学习。
最后补充一点,HcySunYang/sao-hcy-nm 做为 saojs/sao 的生成器,其中使用到了用于编译的 bili ,而且 saojs/sao 和 bili 都是 EGOIST 的做品。回头我会和 EGOIST 要广告费的,手动微笑。