终于把研究生开题的事情弄得差很少了,能够抽空写一下2018年的小结了。前端
今年和去年同样,也是格外忙。不只实验室活多,还要兼顾研究生的开题等。跟去年同样,列一个今年学习成果清单:vue
2019.01.17(插播)hexo-theme-melody star数破500。【hexo+hexo-theme】node
2019.01.13(插播) PicGo 发布v2.0版本,正式支持插件系统。star数破3200,下载量破26k。【Electron】react
2018.08.28 PicGo star数破2000,下载量破12k。【Electron】git
2018.07.19 PicGo-Core 开坑PicGo底层流程系统,将支持插件系统【Node+TypeScript】github
2018.07.11 PicGo 更新v1.6版本,支持阿里云OSS,imgur,mini窗口,批量删除等功能。【Electron】算法
2018.05.23 为VSCode的amVim-for-VSCode插件提交的支持:
呼出Command Palette
并实现部分Vim命令的PR被合并。【TypeScript】vue-cli
2018.05.17 PicGo star数破800,下载数破5k。【Electron】npm
2018.05.15 开发推来推趣3期后台时遇到微信二维码支付相关功能的开发,总结了一篇《基于Koa2开发微信二维码扫码支付相关流程》的经验文。【Koa】segmentfault
2018.05.09 PicGo 更新v1.5版本,支持腾讯云COSv五、GitHub图床、重命名等新功能。【Electron】
2018.03.28 node-github-profile-summary和vue-koa-demo的Docker话。【Docker】
2018.03.10~2018.05.31 推来推趣3期后台(全栈)迭代。【Vue+Koa+Graphql】
2018.03.06 hexo-theme-melody 更新v1.5版本,支持iframe、支持slides等特性。【hexo+hexo-theme】
2018.01.17~2018.03.28 开坑node-github-profile-summary,能够生成漂亮的GitHub总结报告。【Vue+Koa+Chart.js+Graphql】
2018.01.11~2018.05.08 写了Electron-vue开发实战系列教程,用于记录本身开发PicGo的坑以及帮助新人入门Electron开发。【Electron】
对比去年给本身立的目标:
感受完成度不够高,不及去年同期对2016年的目标的实现。主要是没有预料到下半年研究生的开题的战线耗时这么久。从2018年8月开始我就没有发过笔记或者技术文章了,真的很是惭愧。
依然要写下2019年须要学习的东西:
感受把目标缩小点应该完成度会更高。毕竟19年要开始找实习和正式工做+写研究生毕设了。
这一年来的前端的学习之路,收获仍是很多的。比起2017年来讲,我感受最大的收获就是阅读源码的能力提升了。虽然不是什么高深的源码,不过相比以前对阅读源码有恐惧心理的本身,仍是好了很多。文章写得很少,除了上半年的Electron-vue开发实战系列教程,好像以后也没啥能拿得出手的文章。不过没什么人看是真的。
5月份的时候,那段时间个人Mac上的VSCode的Vim插件变得异常卡,能够参考这个issue。无奈之下只能把官方的Vim插件替换掉,换成了amVim-for-VSCode,当初刚换上的时候,操做如丝般顺滑!不过当时发现它不支持:
带来的一系列操做,好比:w
保存,:q
退出等。因而我萌生了一个想法,能不能把VSCodeVim的操做移植到amVim上?在阅读了VSCodeVim的源码以后,我也模仿了它的实现,把一部分经常使用的命令移植到了amVim上,并最终成功被做者合并。
此次提交PR的过程,我也发了一篇文章做为记录。应该说此次经历事后我对阅读源码的恐惧感减轻了很多,这也为以后的PicGo-Core的开发带来很大的帮助。
8月份以后很长的一段时间里,除了在作研究生开题相关的东西,我基本就是在开发PicGo-Core了。若是你有用过PicGo,那么你应该知道它的1.x版本是不支持插件系统的。并且内置的只有有限的8个图床。(若是你不知道PicGo,欢迎使用,对你的文章写做有很大帮助~)。PicGo
里我收到最多的issue,应该就是可否支持XXX图床
。若是是一开始写PicGo的时候,我通常会在下一个版本里更新新的图床支持。可是支持到第8个的时候我发现这样无限地支持下去不是一个办法。正巧有个用户提出一个想法:可否将对各类图床的支持,作成插件化的管理,相似 Core + Plugins 这样的模式。
我为此思考了很久,发现这样是可行并且很是合理的。因而我开始找相关的资料——我一开始的想法只是在Electron内部实现一个插件系统。为此我去找了很多例子,好比VSCode、Kap、Atom、Hyper等用Electron写的工具,想看看他们的插件系统是如何实现的。发现他们的实现相对比较复杂。对我来讲我是想要实现一个底层的上传流程系统。
后来我想到了Hexo也是有插件系统的,因而就去阅读了Hexo的插件系统如何实现。在看Hexo插件系统实现的同时,我还发现了另一个工具feflow的插件系统实现。不过我后来发现,feflow的插件体系其实底层大部分是「抄」的hexo的源码的,尤为一个很经典的例子...
因而我就把feflow的文章当作hexo插件系统实现的解析文章了哈哈。
在充分理解了hexo插件如何实现了以后,我也开始着手我本身的PicGo-Core了。固然我并无彻底照搬hexo的实现,由于我发现那样的话不利于插件开发者开发插件(主要是语法提示),hexo的插件机制是暴露全局的hexo
变量去实现的。
PicGo-Core
的流程大概以下:
输入路径或者变量等->通过转换器转换->上传器上传->输出结果。中间包含着三个生命周期钩子。这样的话用户开发插件能够只实现其中的某个部分,也能够实现其中的某几个部分,来实现PicGo
原先不能实现的一些功能:
等等。
我也正式使用了TypeScript
做为PicGo-Core
的开发语言,使用起来一开始确实很不习惯,可是后来越用越顺手,学习新东西的过程大概都是这样吧!
在开发PicGo-Core
的过程当中,我也作了不少除了上面流程系统以外的工做。好比:
PicGo-Core
加上了命令行支持,一样插件也能支持注册命令等操做。vue-cli2
和vue-cli3
对于模板生成的实现,写了一个下载模板、生成模板的命令init,好让插件开发者可以快速建立插件模板进行插件开发。npm
命令来下载插件。PicGo-Core
的文档,配图、示例包罗万象。开发完Node版本的PicGo-Core
以后,我还要将它和Electron版本的PicGo
整合起来,使得Electron版本的PicGo
也能拥有插件系统。而且还得经过ipcMain
等方式,将主进程的信息通知给渲染进程,从而渲染出插件页面里的插件列表:
为了让插件开发者可以更好地利用GUI版本的优点,我还为GUI版本的PicGo插件加了GUI插件特有的guiApi
、guiMenu
等功能:
这样插件拥有本身的菜单,能够执行本身的操做,那么能作的事就更多了,好比:
等等。。
终于,在2019年1月13号,PicGo迎来了2.0版本的更新。
回顾这些工做,都是我一我的在半年的时间里经过课余的时间作出来的,其实仍是很自豪的。更关键的是,经过开放了插件系统,可让更多的人参与到PicGo软件的完善中来,经过插件能够实现不少本体不提供或者不足的功能,也是让PicGo更增强大的一个条件。我也但愿它往后也能造成本身的一个小生态。
实际上,PicGo-Core以及PicGo2.0发布以后,就已经有第三方开发者开发插件了,速度之快让我始料未及。为此我也迅速加上了Awesome-PicGo的仓库,这样能让更多的开发者的做品让用户看到:
你已经能够在VSCode里搜索PicGo,就能发现VSCode版的PicGo扩展了,实现了三种在Markdown里快速上传图片的方式:
2019年,我会更新几篇文章,主要讲讲如何实现一个插件系统,如何将Node端实现的插件系统整合到Electron端,如何实现一个模板下载、生成功能,如何实现良好的命令行交互等等。平时都是给别人的系统写插件,不如本身实现一个插件系统吧,哈哈。
2019年也是我找实习、找正式工做的一年,但愿今年一切都顺利吧!
也但愿这篇文章能让更多人看到...