最近在写Vcenter的时候,KOA老是会蹦出来一句

koa deprecated Support for generators will be removed in v3. See the documentation for examples of how to convert old middleware https://github.com/koajs/koa/blob/master/docs/migration.md webpack:\server\server.js?, <anonymous>:40:5

意思是你用了一个 KOA1时代的生成器写法,非常古老了,下个版本不兼容了,赶紧换了吧。

其实这个也没啥影响,只是一个warning,但是本强迫症看着非常难受。

于是有了以下非常焦躁的DEBUG经历。

思路1

首先猜测问题,生成器写法,这个也许和ES7的async语法有关系,难道是因为babel把async转换成了generator?

我对此深信不疑,于是开始各种百度、谷歌、starkoverflow、segmentfault,最后一无所获,嘿,我就是想找找babel怎么单独关闭对async语法的transform,但是愣是没有这种操作。

80%的文章告诉你如何使用babel对async进行转码,10%的文章谈到了babel-polyfill,还有一些文章列举的是 bable-preset-env可以设置targets来进行针对性的转码,试了半天,问题仍然没有解决,那个刺眼的warning始终无法取消。

讲道理KOA一个这么大的框架,babel的使用群体也非常丰富,不应该只有我一个人遇到这个问题吧。

前后历时三个小时,把.babelrc、webpack.config之类的文件改了无数遍,依然无效,甚至还给babel升级到了7.0.0。

思路2

转换到思路2很不容易,眼看将要午夜,都有点绝望了,翻到一篇文章,讲的是,使用 KOA-static的时候出现了这个错误,使用了 koa-convert来解决这个问题。

这个文章犹如一盏明灯呀,忽然给我指出了这个问题的另一个方向

这个warning不一定是我自己的代码引起的,说不定还真是其他的中间件的版本不对

当然,这个版本不对的中间件不是KOA-static,而是KOA-cors。

当初在安装这个中间件的时候看文档时发生一个疏忽,误将文档中的KOA2版本理解成这个版本支持KOA2。

找到问题了,解决方法很简单,直接把 KOA-cors换成KOA2-cors就好了,也不用什么convert了。

后记

很多时候问题都不是出现在自己身上,要多从别人的身上找找原因。