```xml
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-faas-luffy</artifactId>
</dependency>
```


#### 1、描述

函数计算扩展插件。一个文件，即为一个函数。它是 Solon 与函数计算引擎 [Luffy](https://gitee.com/noear/luffy) 的结合（做低代码，它是良配）。目前，可选的执行器有：


| 执行器 | 函数后缀名 | 描述 | 备注 |
| -------- | -------- | -------- | -------- |
| luffy.executor.s.javascript     | `.js`     | javascript 代码执行器（支持 jdk8, jdk11）     | 默认集成 |
| luffy.executor.s.graaljs     | `.js`     | javascript 代码执行器     |   |
| luffy.executor.s.nashorn     | `.js`     | javascript 代码执行器（支持 jdk17, jdk21）     |   |
| luffy.executor.s.python     | `.py`     | python 代码执行器     |   |
| luffy.executor.s.ruby     | `.rb`     | ruby 代码执行器     |   |
| luffy.executor.s.groovy     | `.groovy`     | groovy 代码执行器     |   |
| luffy.executor.s.lua     | `.lua`     | lua 代码执行器     |   |
| | | |   |
| luffy.executor.m.freemarker     | `.ftl`     | freemarker 模板执行器     |   |
| luffy.executor.m.velocity     | `.vm`     | velocity 模板执行器     |   |
| luffy.executor.m.thymeleaf     | `.thy`     | thymeleaf 模板执行器     |   |
| luffy.executor.m.beetl     | `.btl`     | beetl 模板执行器     |   |
| luffy.executor.m.enjoy     | `.enj`     | enjoy 模板执行器     |   |

插件会通过后缀名，自动匹配不同的执行器。（使用其它 js 执行器时，需要排除掉默认的）


#### 2、应用示例

* 添加启动类

```java
@SolonMain
public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args, app->{
            //让 Luffy 的处理，接管所有 http 请求
            app.all("**", new LuffyHandler());
            
            //添加外部文件夹资源加载器（可以自己定义，比如实现数据库里的文件加载器）
            app.context().wrapAndPut(JtFunctionLoader.class, new JtFunctionLoaderFile("./luffy/"));
        });
    }
}
```

* 添加资源文件 /luffy/hello.js （你好，世界！）

```javascript
let name = ctx.param("name");

if(!name){
    name = "world";
}

return `Hello ${name}!`;
```

资源文件是默认支持的。也可以把文件放在外部目录 "./luffy"（即 jar 边上的目录），随时更新，随时生效（一般，生产会放这里。或者定制数据库的加载器）。


* 浏览器找开：http://localhost:8080/hello.js?name=solon




