--- title: functions 使用指南 author: pengzhanbo createTime: 2024/03/12 17:56:28 permalink: /plugins/plugin-netlify-functions/functions/ --- ## 说明 ### 在一个 vuepress 项目中 在默认配置下,如果你 packages.json ``` json { "scripts": { "serve": "vuepress dev src", "build": "vuepress build src" } } ``` 即, 你的 `sourceDir` 为 `src` 目录, 那么,你的functions目录则为 `src/.vuepress/functions`。 在这个目录下,直属的 `ts/js` 文件,均为一个个独立的 `function`, 不包括这个目录下的子目录。 ``` sh src/.vuepress/functions ├─my_function.ts # 这是一个function 通过 /api/my_function 调用 ├─verify_phone.ts # 这是一个 function, 通过 /api/verify_phone 调用 └─utils # 子目录中的不会被识别为function └─index.ts ``` ### 在一个 vuepress plugin 项目中 以官方仓库插件的基本组织结构为例 ``` sh src/node ├─functions │ ├─my_function.ts # 这是一个function 通过 /api/my_function 调用 │ ├─verify_phone.ts # 这是一个 function, 通过 /api/verify_phone 调用 │ └─utils # 子目录中的不会被识别为function │ └─index.ts ├─index.ts └─plugin.ts # 在这个文件中配置了 directory 为 path.resolve(__dirname, 'functions') ``` ## 依赖 如果你是使用 typescript 作为开发语言,那么可以引入 `@netlify/functions` 模块提供类型检查支持。 如果你的 function 依赖其他的第三方模块,请在配置在项目`package.json` 的 `dependencies` 字段中作为生产依赖。 如果你是通过插件提供 function,请在 插件的使用指南中 说明,你的插件function依赖了哪些第三方模块, 提醒使用者安装这些依赖。 ## function `functions` 通过 导出一个 `handler` 函数 提供给 云函数服务调用。 一个 function 的内容一般如下: - 异步函数 在异步函数中,支持直接返回一个对象作为 响应体报文 ``` ts import { Handler } from '@netlify/functions' export const handler: Handler = async function (event, context) { // do something return { statusCode: 200, body: JSON.stringify({}) } } ``` - 非异步函数 在非异步函数中,通过 `callback` 函数参数返回响应体报文 ``` ts import { Handler } from '@netlify/functions' export const handler: Handler = function (event, context, callback) { // do something callback({ statusCode: 200, body: JSON.stringify({}) }) } ``` ## 示例 [plugin-page-collection](https://github.com/pengzhanbo/vuepress-theme-plume/tree/main/plugins/plugin-page-collection) 页面访问次数插件