---
order: 4
navTitle: 脚本开发
---
# 脚本开发

扩展表达式函数要完成自己的逻辑，就需要一些代码逻辑，本文介绍如何通过脚本语言开发扩展表达式函数。

表达式函数的运行环境包括前端浏览器环境、后端服务器环境、和数据库SQL环境，表达式函数不一定需要在每个环境中都能运行，能满足需求即可，可以都支持，也可以只在某个环境运行。

:::tip
如果能使用现有的表达式函数（见[表达式函数](../../../../exp/func/README.md)）组合即可完成需求，那么可以直接配置[expTemplate](./package-json.md#exptemplate)，这样就不需要做脚本开发了，系统会自动适配各种运行环境。
:::

## 前端脚本{#frondend-script}

如果函数要在前端浏览器环境运行，需要开发一个前端脚本文件，如 `script.ts`，代码示例如下：

```ts
export function func1(ctx: any, arg1: string, arg2: number): any | Promise<any> {
  //...
}
```

然后：

1. 配置[jsScript](./package-json.md#jsscript)为脚本的文件名，如 `script.js`，`script.ts` 编译后会生成 `script.js`。
2. 配置[scriptFunc](./package-json.md#scriptfunc)为函数名，如 `func1`。

如果在表达式编辑界面对于函数有些特殊的合法性检查机制，那么也可以开发一个前端脚本函数，专门用于检查函数参数的合法性，甚至根据参数返回动态的函数的类型，如：

```ts
export function checkfunc1Args(node: any, compileContext: any): void{
   if (...){
       //报告错误信息
       compileContext.throwError("err.exp.expectArgument", node);
   }
}
```

然后：

1. 配置[checkArgsFunc](./package-json.md#checkargsfunc)为函数名，如"func1"。

## 后端脚本{#backend-script}

如果函数要在后端服务器环境运行，需要开发一个后端脚本文件，如 `script.action.ts`，代码示例如下：

```ts
export function func1(ctx: any, arg1: string, arg2: number): any {
  //...
}
```

:::tip
与前端函数不同，后端函数不支持返回异步结果。
:::

然后：

1. 配置[serverScript](./package-json.md#serverscript)为脚本的文件名，如 `script.action`，`script.action.ts` 编译后会生成 `script.action`。
2. 配置[scriptFunc](./package-json.md#scriptfunc)为函数名，如 `func1`。
