精华 值得关注的 eggjs 动态 03 期
发布于 5 个月前 作者 atian25 6119 次浏览 来自 分享

image.png

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 的文档汇集了很多我们在企业级应用中沉淀下来的框架设计思路,即使你不用 egg,也可以借鉴参考下。

有多位同学参与了我们的文档中译英,非常感谢。目前还未全部完成,我们需要你的帮助,如果有兴趣请访问:https://github.com/eggjs/egg/issues/363

值得关注的社区动态

  • @高皓亮 造的新轮子 pkgfiles 用于避免 npm publish 遗漏文件,已集成到 egg-bin 。
31 回复

看胖瘦肯定是苏千 @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

博主您好,请问一下cache要怎么使用?在文档上只查到 this.app.cache.get(),除了get方法之外还有其他API吗?有没有cache用法的详细文档?谢谢

@lpbird 直接 github pull request

@Leungkingman 内置没有 cache,那个只是示例代码。可以用 egg-redis 之类的插件

@atian25 好的,谢谢。另外想请教一个问题,现在我生产环境部署在linux服务器上,每次更新代码我都要先执行kill指令把当前正在运行网站的线程杀掉再重新start,eggjs框架有没有一些功能可以监听代码变化然后马上重启服务?有的话要怎么做?因为在本地开发的时候是可以的,那生产环境应该也可以才对。

@Leungkingman

  • 本地开发是通过 egg-development 的
  • 生产环境不应该监听代码变化而重启,在生产环境应该是挂在 nginx 后面,逐个平衡重启(nginx 切流量,整个压缩包替换,kill 优雅退出后,重启)

蛋好,知道了

回到顶部