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();