代码动作
当图不够用时,Code 节点可以执行一段脚本。
共有七种语言可用,全部运行在内置的 WebAssembly 沙箱中:您的机器上无需安装任何解释器, 脚本也无法访问您的文件系统。
| 语言 | 引擎 |
|---|---|
| TypeScript | QuickJS(类型在编译时被剥除) |
| JavaScript | QuickJS |
| Python | Pyodide(编译为 WebAssembly 的 CPython) |
| Lua | 编译为 WebAssembly 的 Lua 5.4 |
| Ruby | 编译为 WebAssembly 的 CRuby |
| R | WebR |
| C# | 带 Roslyn 的 WebAssembly 版 .NET |
默认语言是 TypeScript。
无论使用哪种语言,该节点暴露的东西都一样:
| 输入 | value(名为 input)、code(字符串) |
| 输出 | result |
| 配置 | language、code、timeout、packages |
input—— 从输入端口收到的值。vars—— 运行变量。- 语言的标准输出(
console.log、print、puts、cat、Console.WriteLine)会写入执行日志。 - 返回的值会从
result端口发出。错误或超时则从error发出。
timeout,单位为秒:默认 5 秒,最大 60 秒。超时的脚本会被中断,
执行会转到 error 端口。
packages 字段接受一组 { name, version }。确切的版本号会作为缓存键:依赖会在首次执行时
被解析并缓存,随后每次执行都以离线方式挂载 —— 在 CI 中也是如此。
| 语言 | 来源 |
|---|---|
| TypeScript / JavaScript | npm(整体打包) |
| Python | 来自 PyPI 的纯 Python wheel 包 |
| Lua | LuaRocks(纯 Lua 源码) |
| Ruby | 纯 Ruby gem |
| R | CRAN,经由 WebR 的 WebAssembly 仓库 |
| C# | 无 —— 仅 .NET 标准库 |
何时不该写代码
Section titled “何时不该写代码”很多需求已经有对应的节点覆盖,而且更易读、更快:
| 需求 | 节点 |
|---|---|
| 从响应中提取一个值 | 一个连线选择器 |
| 格式化一个字符串 | 转换 |
| 过滤、排序、聚合一个列表 | 列表 |
| 哈希、编码、签名 | 编码 |
| 校验一个结构 | 校验模式 |
请把 Code 节点留给真正特有的逻辑。