eggjs-feed 系列期刊,用于汇总近期值得关注的 egg 相关动态,将不定期发布。 原文来自知乎专栏:https://zhuanlan.zhihu.com/p/25457918
TOC:
- 精彩讨论
- 文档更新 && 导读
- 值得关注的 Node.js 社区动态
👏👏👏 Egg Star 破 4k 啦!!!
👏👏👏 Egg Star 破 4k 啦!!!
👏👏👏 Egg Star 破 4k 啦!!!
你不来一发么?https://github.com/eggjs/egg
精彩讨论
在 eggjs 团队的日常协作中,遵循「基于 GitLab 的硬盘式异步协作模式」。 通过 issue 发起 RFC 提案 -> 讨论定稿-> 提交 Pull Request -> Code Review -> 发布。 这样便于沉淀,即使是当时没有参与讨论的开发者,事后也能通过 issue 了解某个功能设计的前因后果。
Θ 子进程的优雅退出 - 再次完善
背景: 在做 egg-cluster 的时候,app worker 是由 cluster fork 出来的,然而 agent worker 是 master 通过 child_process.fork 出来的。他们两者之间在 master 正常退出的情况下,没太大区别。但是在 master 意外被强杀,如
kill -9
杀掉,那么 app worker 还是会优雅退出,但是 agent worker 却变成了孤儿进程。 我们发现,通过 child_process fork 出来的子进程,如果需要实现父进程挂了子进程也跟着挂,必须在子进程里面也加上相应的处理才能实现,没办法只通过父进程来实现。
于是我们将该解决方案沉淀到一个 graceful-process 模块,只需要在子进程代码里面执行一下优雅退出逻辑即可。 http://github.com/eggjs/egg-cluster/pull/27
Θ 断点调试插件
在本地断点时,经常遇到的一个痛点就是修改后重启的 worker 的 debugPort 变了,@仙森(黄朝桂) 同学为此专门写了个 egg-development-proxyworker 插件,配合 vscode / atom 调试非常方便。
Θ egg-bin 覆盖率工具替换为 nyc
egg-bin@4.x 把内置的覆盖率工具 istanbul 替换为 nyc,多进程覆盖率的测试速度提升了几倍。都是同一作者的作品,后者目前活跃度高,并支持前端很多新特性。
测试命令行的时候,可以用我们的 coffee 和 egg-bin,具体可以参见 egg-bin 本身的测试。
Θ Egg 正在逐步支持 TypeScript
感谢 @宋爱华,目前 Egg 已经开始陆续支持 TS,https://github.com/eggjs/egg/pull/1027,欢迎大家一起参与完善。
Θ 再次宣告,Egg 从 1.0 版本开始早就已经支持 Async Await
直到现在,还是很多同学以为 Egg 不支持 Async,其实早在 1.0 版时,你只需要 Node 7.6+ 以上版本,即可在 Egg 里面使用。
作为应用开发者,并不需要关注 Egg 底层,我们兼容了 Koa 1.x 和 2.x 的中间件,可以放心的复用 Koa 社区生态。
具体参见文档 - 『使用 async function 开发应用』。
Θ 插件理念进化
在实践中,我们发现很多情况下,一些功能是具备很大共性,但又需要支持不同策略的,于是我们在以下插件中做了一些抽象和实践:
简单的说,主插件负责通用逻辑和流程的处理,二级策略插件用于根据业务场景选择挂载。
- egg-view → 支持多模板引擎
- egg-view-nunjucks
- egg-view-handlebars
- egg-view-ejs
- egg-view-handlebars
- egg-view-vue(是的,我们支持 vue ssr 了,但配套 webpack 那块还需等等。)
- egg-passport → 账号登陆
- egg-session → 除内置的 CookieStore 外,还增加了多 Store 的支持,如 egg-session-redis
文档
对于开源项目来说,文档是非常重要的。虽然我们姗姗来迟,但我们诚意十足。 egg 的文档汇集了很多我们在企业级应用中沉淀下来的框架设计思路,即使你不用 egg,也可以借鉴参考下。
- 新增『框架内置基础对象』,新同学值得一阅。
- 原『多进程模型』文档拆分为『多进程模型和进程间通讯』和『多进程研发模式增强』。
- 新增 『应用部署』。
- Egg 官网文档构建工具 doctools 独立出来了,基于 Egg 的上层框架可以很方便的合并文档,并发布自己的官网。
有多位同学参与了我们的文档中译英,非常感谢。目前还未全部完成,我们需要你的帮助,如果有兴趣请访问:https://github.com/eggjs/egg/issues/363
值得关注的社区动态
- @高皓亮 造的新轮子 pkgfiles 用于避免 npm publish 遗漏文件,已集成到 egg-bin 。
看胖瘦肯定是苏千 @fengmk2
恩,egg赛高,定时任务是不是再加强一下,提供分布式支持
@o6875461 我们内部有分布式这类的任务调度插件,但这个跟你所在公司的基建有关,开源不了,不属于 egg 的职责范围,egg-schedule 有提供可扩展扩展接口,可以根据自己的场景扩展下。
持续关注
最近一直在关注egg.js,学习中。
一直在研究怎么写egg的插件,但是很无奈,失败了。。。
@461534898 额… 失败的原因是?直接 egg-init --type=plugin
, 然后还有几十个插件的源码也可以看看。
Star
并且Fork
了一发。@atian25
阿天,作为小菜的我就是不需要理由捧你的场
egg github上的examples的readme.md有些都有问题,尝试安装hackernews-async-ts失败
@zkeyword 麻烦提供详细的报错信息,到 egg 的 issue 反馈下
就问官方正品文化衫哪里有卖?
@zy445566 这次我们只是印了几件给我们核心开发者和活跃的贡献者。
@atian25 可以可以,很正直,签名文化衫那肯定有个好价钱
egg做的越来越好了,国人的骄傲!
@atian25 阿里有木有意向开发自己的编程语言,
@atian25 好像是什么异步错误,晚上回去再研究一下。。心疼自己的智商
@461534898 要提供必要的信息我们才能帮你解决,否则就像: 如何向开源项目提交无法解答的问题
@maochunguang 应该没有也没必要
赞一个。egg的技术支持太强悍了!
T恤不错,赞
来自酷炫的 CNodeMD
@atian25 有心了,我还是在知乎上先看到的,已经购买了
egg-mysql 的update部分 被我改了 我怎么贡献 给你们呢? 这个插件update只能指定主键 而去必须是 id
@461534898 nice
博主您好,请问一下cache要怎么使用?在文档上只查到 this.app.cache.get(),除了get方法之外还有其他API吗?有没有cache用法的详细文档?谢谢
@lpbird 直接 github pull request
@Leungkingman 内置没有 cache,那个只是示例代码。可以用 egg-redis 之类的插件
@atian25 好的,谢谢。另外想请教一个问题,现在我生产环境部署在linux服务器上,每次更新代码我都要先执行kill指令把当前正在运行网站的线程杀掉再重新start,eggjs框架有没有一些功能可以监听代码变化然后马上重启服务?有的话要怎么做?因为在本地开发的时候是可以的,那生产环境应该也可以才对。
- 本地开发是通过 egg-development 的
- 生产环境不应该监听代码变化而重启,在生产环境应该是挂在 nginx 后面,逐个平衡重启(nginx 切流量,整个压缩包替换,kill 优雅退出后,重启)
蛋好,知道了
插件就是流氓 堆积很多这平台的东西