用户代码运行在 vm2 的 NodeVM 沙箱内, 配置为 external: true + builtin: requireWhiteList。
所有代码在隔离的 vm2 NodeVM 沙箱中执行,不注入任何全局对象。 需要的模块必须显式 require, 白名单之外的包会直接抛出错误,确保运行环境安全可控。
以下模块可在代码节点中通过 require 直接使用
| 包名 | 类型 | 版本 | 用途 |
|---|---|---|---|
console | 内置 | - | 日志输出 |
crypto | Node 内置 | - | 加解密 / 哈希 / 签名 |
events | Node 内置 | - | EventEmitter |
querystring | Node 内置 | - | URL 查询串解析 |
crypto-js | npm | ^4.1.1 | 前端友好加密库(AES / MD5 / HMAC 等) |
fast-xml-parser | npm | ^4.2.7 | 高性能 XML ↔ JSON |
lodash | npm | ^4.17.21 | 工具函数集 |
moment | npm | ^2.29.4 | 时间处理 |
request | npm | ^2.88.2 | HTTP 客户端(含文件下载) |
turndown | npm | ^7.1.2 | HTML → Markdown |
xml2js | npm | ^0.6.2 | XML ↔ JS 对象 |
沙箱不注入全局,白名单外的包会直接抛错。
作用域中已存在变量 bundle,直接使用即可,无需 require。
使用 output = ... 设置返回值,异步逻辑请用 await。
HTTP 请求建议自带 timeout,避免整段脚本被强制中断。
以下 Node 模块被沙箱屏蔽,尝试 require 会直接报错:
fschild_processnethttpconst _ = require('lodash');
const CryptoJS = require('crypto-js');
const moment = require('moment');
output = {
sign: CryptoJS.MD5(bundle.inputData.text).toString(),
now: moment().format('YYYY-MM-DD HH:mm:ss'),
keys: _.keys(bundle.inputData)
};上述示例演示:从 bundle.inputData 读取输入,使用 crypto-js 计算 MD5、moment 生成当前时间、lodash 提取键名, 最终通过 output 返回结构化结果。
• 需要引用其他步骤字段时,通过 bundle.inputData 访问
• 异步逻辑(如 request 请求)请配合 await / Promise 使用
• 请求库 request 建议显式设置 timeout,避免 25s 沙箱超时
• 输出对象过大或存在循环引用会导致序列化失败,请保持 output 为可 JSON 化结构