runkoa:不需要了解babel即可使用koa2+async组合
发布于 9 年前 作者 i5ting 13301 次浏览 最后一次编辑是 8 年前 来自 分享

runkoa

执行koa用到async的时候需要babel环境,这里稍微简单的封装了一下,以便于更简单的使用koa的时候,不用在意babel的细节

依赖

  • “babel-core”: “^6.7.5”,
  • “babel-polyfill”: “^6.1.4”,
  • “babel-preset-es2015”: “^6.1.4”,
  • “babel-preset-stage-3”: “^6.5.0”

Features

  • 不需要了解babel即可使用koa2+async组合
  • 对koa项目代码无入侵,启动时入口处理而已
  • 支持koa@2.x里的3种异步调用方式,无需其他,完美支持
  • 支持cli命令,即runkoa执行
  • 默认读取bin/www文件,启动koa服务
  • 遵循小而美

Install

npm i -g runkoa

Usages

runkoa app.js

Code Example

require('runkoa')(__dirname + '/app.js' )

Test

koa2支持3种写法,分别测试如下

Koa is an middleware framework, it can take 3 different kind function as middleware:

  • common function
  • async function
  • generatorFunction

Here we write an logger middleware with different function.

runkoa app.js
runkoa app-async.js     
runkoa app-generator.js 

集成pm2

touch bin/run

var current_path = process.cwd();

require('runkoa')(current_path + '/bin/www' )

然后执行pm2即可

 #npm run pm2
 pm2 start bin/run 

FAQ

重复引用require(“babel-polyfill”)可能出现的问题

➜  koa-demo runkoa index.js 
index.js
/Users/sang/workspace/17koa/koa-demo/node_modules/babel-polyfill/lib/index.js:14
  throw new Error("only one instance of babel-polyfill is allowed");
  ^

Error: only one instance of babel-polyfill is allowed
    at Object.<anonymous> (/Users/sang/workspace/17koa/koa-demo/node_modules/babel-polyfill/lib/index.js:14:9)
    at Module._compile (module.js:434:26)
    at Module._extensions..js (module.js:452:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/sang/workspace/github/runkoa/node_modules/babel-register/lib/node.js:134:7)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (index.js:3:1)
    at Module._compile (module.js:434:26)
➜  koa-demo cat index.js 
'use strict';
   
require("babel-polyfill");

// set babel in entry file
require('babel-core/register')({
  presets: ['es2015-node5', 'stage-3']
});

require('./app'); // this is es7 - gets transpiled

这时正确的操作是

runkoa  app.js

如果本地已安装runkoa的依赖,会报错

依赖

  • “babel-core”: “^6.7.5”,
  • “babel-polyfill”: “^6.1.4”,
  • “babel-preset-es2015-node”: “^6.1.4”,
  • “babel-preset-stage-3”: “^6.5.0”

请保持你的package.json或node_modules目录下无这些依赖即可

这是因为runkoa需要指定babel需要的preset地址

集成supervisor或nodemon

代码变动,使用supervisor或nodemon自动重启服务是开发里比较好的实践,runkoa可以非常好的和它们进行集成,让开发更简单

首先通过runkoa来加载bin/www里,代码如下

require('runkoa')(__dirname + '/app.js')

然后执行

nodemon bin/www

此时,你可以放心的去修改你的代码了

源码

超级简单模块,用起来还是比较方便的,希望大家喜欢

https://github.com/17koa/runkoa

9 回复

讨厌用babel,烦死了,其实就10行代码的事儿。。。估计会被砍死,但。。。真的很实用

@i5ting typescript 可以帮到你 knode 3 将用它重写

来自酷炫的 CNodeMD

更新pm2部署和faq出错的2个问题,另外在cli和模块上都已经测试过了,在koa-generator上已作为核心模块使用,欢迎使用和反馈

把ci和测试都加上了,增加module-export插件

生产环境下合适吗?

竟然还有老外用,也是醉醉的了,看来懒的人还是很多的,所以更新了一下

更新v1.5.6,支持https://github.com/17koa/runkoa/issues/16

Warning: you've use node v7.x, this version support aysnc/await,you need create an alias:
    alias node='node --harmony-async-await'
Current: node --harmony-async-await app-async.js

@ckken 能介绍下typescript的好处吗?一直不太理解为什么要用typescript

回到顶部