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 的支持

相关推荐