koa2 + node7 是怎样的体验?
恰逢一个简单的小项目,寻思着体验下 koa2 + node7 的组合。之所以 koa 升级到 2.0 版本,一个重大改变是正式支持使用 async/await 开发中间件 ,而之前这个是通过 app.experimental = true 开启试验属性支持的;另外也不再支持 node < 4 的版本,代码风格基于 ES6。而选择node7,是因为其对 ES7 的大部分语法已经支持(完整支持情况见:http://node.green/#ES2017),尤其是通过 --harmony 可以开启 async/await 支持。可以这么说,用了 node7,后端开发可以不用 babel 了。
koa2 及其中间件
初始化项目完毕后,使用 npm i koa@next 安装 2.0 版本。一些 koa 相关的中间件也都提供了@next 版本,来支持 koa2,例如koa-bodyparser,通过 npm i koa-bodyparser@next 安装支持 koa2 的版本。
测试 async/await
测试框架不多说,直接上 mocha,已经支持 async/await,回想一年多前还选择了一些 co-mocha 之类的库。而现在执行测试时,只需 mocha --harmony,一键启动 async/await,我的测试用例已经开始咆哮了~
测试覆盖率检测,选择 istanbul,安装时要指明 1.0 以上版本,因为目前其 1.0 版本还处于 alpha 状态。只有安装 1.0 以上版本才能支持 async/await 的异步测试。执行测试时,需要node --harmony ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha
如果强制覆盖率达到多少,可以增加.istanbul.yml配置文件,内容如下:
check:
global:
statements: 95
lines: 95
branches: 80 // 这个是指 if/else 等分支的覆盖率,很容易理解偏 --!
functions: 100为了方便执行,在 package.json 增加如下命令:
"scripts": {
"check-cover": "node --harmony ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- tests/* && ./node_modules/.bin/istanbul check-cover",
}后续每次提交,通过 git 钩子或者在 CI 里增加检查只需要一行 npm run check-cover 搞定。
代码风格
是时候尝试 JS standard style了,安装 npm i standard,接下来不用再配置其他繁杂的代码风格检测工具。它也支持 vim 等各种编辑器工具。当你遇到不符合规范的代码,直接 standard --fix 便能将你解决大部分问题。需要注意的时,由于测试用例中的 describe it 等全局关键字,需要在 package.json 中指明,配置如下:
"standard": {
"globals": [
"describe",
"before",
"beforeEach",
"after",
"afterEach",
"it"
]
}配置完这些,基本上可以很愉快的用最新的姿势,写最爽的代码了,也不用去折腾 babel,除非你还要 import 的支持