使用 zeit-vercel 来免费部署 serverless 函数服务

vercel.com 是一个 serverless 的函数服务平台,可以直接来整合到github 的仓库。
直接通过 push 事件来触发 CI和CD 的过程,极大的提高来生产力。

快速开始

# 直接全局安装
➜  npm install -g now
# 中间省略 很多过程
# 初始化文件夹,选择 vue
➜ now init

# 一个命令推送到 vercel 托管,稍后就可以访问。
➜ now

托管非静态服务(函数服务)

配置文件

vue 的项目事实上是托管了 静态的页面,很多东西都能做到,像是 github page
并没有用到 函数服务,这里就他的函数服务来进行说明。

使用函数服务的时候需要一个文件 now.json

{
  "version": 2,
  "builds": [
    { "src": "scripts/build_fileless.sh", "use": "@now/static-build" ,"config": { "distDir": "./" }},
    { "src": "server/now.js", "use": "@now/node" }
  ],
  "routes": [
    { "src": "/(.*)", "dest": "server/now.js" }
  ]
}

在 builds 里面来对构建的过程来进行描述,第一行是,在构建的时候执行自定义的脚本。第二行是重点,就是指定我们的最终使用serverless的函数入口。
在routes里的配置,可以指定不同的接口走的是不同的服务函数,这里使用的是 koa 来进行路由分发,所以这里所有的请求都转发的到来 now.js 上面

入口函数

在官方的文档里,有给出的一个例程可以看到,这里的export的函数就是这里函数服务的handle,是一个httpserver的参数结构,接受两个参数传入的req和res。

module.exports = function(req, res) {
  const { name = 'World' } = req.query
  res.send(`Hello ${name}!`)
}

所以在上的的我们知道 koa的app callback 也是一个 req和res的参数类型,所以我要使用 koa app 来作为这里的handle的话,就在导出的时候导出 module.exports = app.callback();,之后就可以按照传统的方式来编写Koa的内容了。

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  const ms = Date.now() - start;
  ctx.set('X-Response-Time', `${ms}ms`);
});

app.use(async (ctx) => {
  ctx.body = 'Hello from koa.js!';
});

module.exports = app.callback();

参考资料

留下点什么吧