n8n 的代码节点可以执行 JavaScript , 这让我们处理数据的能力得到了很大的提升。
大多数场景下我们使用 JavaScript 代码节点的逻辑处理能力基本就能完成我们需要的数据处理能力, 但是有一些特殊场景,或者对一些偷懒的程序员,在使用 n8n 的时候希望更大的开放n8n的代码能力,那就需要引入各种的外部库了。
今天就讲一下 JavaScript 代码节点,怎么引入外部 JS 库。
n8n 内置库
n8n 提供了一些常用的库,无需安装即可使用,也基本满足了我们的日常需求。
-
• lodash- 数据处理和操作工具库 -
• moment- 日期时间处理 -
• axios- HTTP 请求库 -
• crypto- 加密相关功能 -
• uuid- 生成唯一标识符 -
• cheerio- 服务器端 jQuery 实现,用于 HTML 解析 -
• xml2js- XML 解析和构建
解除代码限制
出于安全原因,n8n 代码节点限制导入模块,也就是默认智能使用基本的代码逻辑来处理数据。 但是这样明显限制了「代码节点」的威力,n8n 可以通过设置以下环境变量来解除内置模块和外部模块的限制:
-
• NODE_FUNCTION_ALLOW_BUILTIN:对于内置模块 -
• NODE_FUNCTION_ALLOW_EXTERNAL:适用于来自n8n/node_modules目录的外部模块。未设置环境变量时,外部模块支持将被禁用。
比如:
# Allows usage of all builtin modules
export NODE_FUNCTION_ALLOW_BUILTIN=*
# Allows usage of only crypto
export NODE_FUNCTION_ALLOW_BUILTIN=crypto
# Allows usage of only crypto and fs
export NODE_FUNCTION_ALLOW_BUILTIN=crypto,fs
# Allow usage of external npm modules.
export NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash
为了开发和演示方便,我们都设置为 *。
export NODE_FUNCTION_ALLOW_BUILTIN=*
export NODE_FUNCTION_ALLOW_EXTERNAL=*
使用 Docker 运行
如果是在 Docker 中运行 n8n,需要构建 Docker 镜像的时候安装,加入如下代码填入你需要安装 的包即可:
# Dockerfile
...
USER root
# 安装所需的 npm 包
RUN npm install -g papaparse node-os-utils csvtojson json2csv
USER node
...
使用 Docker 运行时环境变量一般在运行的时候传入,或者使用 compose 设置, 而不是在 Dockerfile 里面设置, 这样构建出来的镜像更通用。
使用 npm 运行
直接 npm install -g 即可。
使用外部库
我们用外部工具库 node-os-utils 来做一个测试。
node-os-utils 是一个用于获取操作系统信息和性能指标的 Node.js 库。 它提供了跨平台的功能,可以在 Windows、macOS、Linux 等操作系统上运行。
我们用 AI 生成一段代码
生成 n8n code node 代码,使用 node-os-utils 库获取系统信息。
const osUtils = require('node-os-utils')
的语法来引入库。
标准 n8n 服务
我们现在使用标准的 n8n 服务(没有安装 node-os-utils 库) 执行这个 Code 节点,输入刚才生成的代码 点击执行,会发现报错 Cannot find module 'node-os-utils'。
自定义 n8n 服务
然后我们使用安装了 'node-os-utils' 包的自定义镜像来运行:
可以看到节点成功执行且输出结果(我当前电脑的内存、磁盘、负载等数据):
为了方便起见,我们把输出的数据稍微可视化一下,添加一个 Quick Chart 节点。
简单配置下 内存和磁盘使用情况:
总结
虽然 n8n 可以安装外部 Npm 包,使用代码节点可以执行 JavaScript 代码, 但是代码节点的主要用途还是处理数据,我们也不要滥用。
安装外部节点会带来一些代价和可能的问题:
-
• 复杂度提升 -
• 外部库更新不及时或依赖的库更新不及时导致无法使用 -
• 外部库和标准库冲突导致无法使用 -
• 外部库有安全问题 -
• 未来无法迁移到云端
适合使用外部库的场景,
-
• 企业内部标准化的或者常用的库 -
• 处理简单的逻辑
不太适合的场景:
-
• 处理复杂的逻辑 -
• 调用第三方 API -
• 可以通过其他节点完成的功能
--- END ---
建了个群,大家对 n8n 和 AI 智能体感兴趣的可以加入一起讨论。

