首先介绍下在本文出现的几个比较重要的概念:html
函数计算(Function Compute):函数计算是一个事件驱动的服务,经过函数计算,用户无需管理服务器等运行状况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。
Aliyun Serverless VSCode Extension: 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了 函数计算 Funcraft:Funcraft 工具以及 函数计算 SDK ,是一款 VSCode 图形化开发调试函数计算以及操做函数计算资源的工具。
Funcraft:Funcraft 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它经过一个资源配置文件(template.yml),协助您进行开发、构建、部署操做。Fun 的更多文档参考。
本文打算以一个简单的 Serverless 函数计算项目为例,尝试使用 typescript + nodejs 进行开发,搭建一个简单的工程项目,实现以下小目标:node
前期准备的目的是为了方便开发和调试,目前阿里云 Function Compute 提供了命令行工具 Funcraft 以及图形化 VSCode 插件。安装 Docker 是为了在本地模拟线上环境进行调试,若是想快速浏览下 nodejs + typescript 工程项目的搭建,能够跳过。git
配置 tsconfig.jsongithub
tsc --init
,将会在项目根目录生成 tsconfig.json
tsconfig.json
内容为:{ "compilerOptions": { "target": "es5", "module": "commonjs", "noImplicitAny": true, "outDir": "./dist/", "sourceMap": true }, "include": [ "./src" ] }

配置 package.jsontypescript
npm init
,将会在项目根目录生成 package.json
package.json
内容为:{ "name": "fc-ts", "version": "1.0.0", "description": "Function Compute + Typescript", "main": "index.js", "scripts": { "compile": "tsc -p ./" } }

编写业务代码npm
export const handler = ( event: any, context: any, callback: (err: any, data: any) => void, ) => { console.log(new String(event)); callback(null, 'hello world'); }

将 ts 代码编译为 js 代码json
npm run compile
dist
文件夹以及 dist/index.js
、dist/index.js.map
文件至此,咱们搭建了一个常规的 typescript 项目,有 tsconfig.json
、package.json
、src 源码目录
、dist 结果目录
。其中,src/index.ts
文件中定义了一个 handler 方法,该方法符合函数计算中函数入口方法的定义。服务器
在项目根目录新建 index.js
文件,文件内容以下:less
const { handler } = require('./dist/index'); module.exports.handler = (event, context, callback) => { handler(event, context, callback); }
这里又定义了一个 handler 方法,该方法中调用了编译后 js 文件中的 handler 方法。ide
在项目根目录新建 template.yml
文件,文件内容以下:
ROSTemplateFormatVersion: '2015-09-01' Transform: 'Aliyun::Serverless-2018-04-03' Resources: demo: # service name Type: 'Aliyun::Serverless::Service' Properties: Description: This is FC service func01: # function name Type: 'Aliyun::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs8 CodeUri: ./ MemorySize: 1024 Timeout: 15
该文件中对咱们的资源(即函数计算中的服务以及函数)进行了定义,具体内容能够参考:Fun 规范文档。
若是安装了 Serverless VSCode 插件,那么能够尝试下插件的智能提示,效果如图:
至此,咱们就成功的将 typescript 项目结合到了函数计算中。咱们的作法是:将 typescript 源码文件放置在 src 目录,将编译后的 js 文件放置在 dist 目录,最后在项目根目录中编写了 index.js 文件,文件中的 handler 处理函数调用了编译后 index 文件的入口函数。
本地调试
index.js
以及 src/index.ts
文件中插入一些断点。部署函数
远端调用函数
目前阿里云 Function Compute 没有原生支持 Typescript,可是经过本文的方式能够作到在本地开发调试时使用 Typescript。接下来总结下这种实践方法的优势和不足:
优势
不足
本文中介绍的实践方式只是一种思路,欢迎你们提供其余的思路。
本文为阿里云内容,未经容许不得转载。