如何在n8n中创建自定义节点?
在 n8n 中添加自定义节点:扩展你的自动化能力
n8n 是一款强大的开源工作流程自动化工具,而其最吸引人的特性之一就是其卓越的可扩展性。通过创建自定义节点,你可以连接任何你想集成的服务,或者实现任何特定的业务逻辑。本文将为你详细介绍两种在 n8n 中添加自定义节点的方法。
在开始之前,请确保你的本地 n8n 环境使用的是 pnpm 作为包管理器,因为 n8n 官方仓库采用 pnpm workspaces。
方案一:使用官方模板仓库开发自定义节点库 (推荐)
这种方法允许你将自定义节点作为独立的 NPM 包进行开发和管理,更加灵活,也更容易分享和维护。
步骤详解
克隆官方模板项目
通过 Git 将n8n-nodes-starter仓库克隆到本地。1
2git clone https://github.com/n8n-io/n8n-nodes-starter.git n8n-nodes-custom-package
cd n8n-nodes-custom-package
1 | |
💡 提示: 我将克隆后的目录命名为
n8n-nodes-custom-package,以便与后续的包名对应。
修改
package.json中的包名
打开项目根目录下的package.json文件,将其中的name属性修改为一个有意义且唯一的名称。通常遵循n8n-nodes-<your-package-name>的命名规范。1
2
3
4
5
6
7
8{
// "name": "n8n-nodes-starter", // 原始名称
"name": "n8n-nodes-custom", // 修改为你的自定义包名
"version": "0.1.0",
"description": "My custom n8n nodes",
"private": false, // 如果打算发布到 npm, 需要设为 false
// ... 其他配置
}💡 提示: 模板项目中的
nodes/目录下已包含两个示例节点 (ExampleNode和HttpBin)。你可以根据需要修改它们,或者直接删除并添加自己的节点代码文件。开发并构建你的节点
在n8n-nodes-custom-package目录中,你可以开始编写你的自定义节点逻辑。完成修改后,执行以下命令来构建你的节点并将其全局链接到 pnpm 的 store:1
2pnpm run build
pnpm link --globalpnpm run build: 编译你的 TypeScript 节点文件为 JavaScript,并处理图标等资源。pnpm link --global: 这会将你的n8n-nodes-custom包(即package.json中定义的name)全局链接到 pnpm 的存储中,使其可被其他项目发现和使用。
将自定义节点导入本地 n8n
现在,你需要将全局链接的自定义节点库导入到你的本地 n8n 实例中。n8n 通常会在其数据目录下的custom文件夹中寻找额外的节点。首先,确保该目录存在:
1
2mkdir -p ~/.n8n/custom/ # 适用于 macOS/Linux
# 对于 Windows,通常是 %USERPROFILE%\.n8n\custom\然后,进入该目录并使用
pnpm link命令链接你的自定义节点包:1
2cd ~/.n8n/custom/
pnpm link n8n-nodes-custom # 这里的 'n8n-nodes-custom' 是你在 package.json 中设置的 name重新启动 n8n 服务
返回你的 n8n 主项目目录,并使用pnpm启动 n8n:1
2
3
4cd /path/to/your/n8n-repo # 你的 n8n 源码仓库路径
pnpm start
# 或者使用开发模式,更适合调试:
# pnpm run dev验证: 在浏览器中打开 n8n UI (通常是
http://localhost:5678)。在节点选择列表中搜索你的节点displayName(例如:“Example Node”或你自定义的节点名称),你应该就能看到它们了!
方案二:直接在 n8n 项目源码中编写节点代码
如果你正在对 n8n 核心代码进行深度开发,或者希望直接贡献新的内置节点,那么直接在 n8n 源码仓库中编写节点代码是更直接的方式。n8n 所有内置节点都位于其 packages/nodes-base/nodes 目录中。
步骤详解
创建节点代码文件
在你的本地 n8n 源码仓库中,导航到 packages/nodes-base/nodes/ 目录。
在该目录下创建一个新的子目录,例如 CustomNode。
接着,在该 CustomNode 目录中创建你的节点文件,命名为 CustomNode.node.ts。
1 | |
验证 packages/nodes-base/tsconfig.json 配置
确保在 /your-n8n-repo/packages/nodes-base/tsconfig.json 文件中,include 属性包含了 nodes/**/*.ts,这样你的自定义节点文件才会被 TypeScript 编译器找到并处理。
1 | |
构建并启动 n8n
在 n8n 源码仓库的根目录 (/your-n8n-repo) 执行以下命令:
1 | |
pnpm run build: 这会编译整个packages/nodes-base包,你的CustomNode.node.ts将被编译成CustomNode.node.js和CustomNode.node.d.ts,并放置在packages/nodes-base/dist/nodes/CustomNode/目录下。
💡 重要检查: 在执行
pnpm run build后,请务必检查packages/nodes-base/dist/nodes/CustomNode/目录,确保CustomNode.node.js和CustomNode.node.d.ts都已正确生成。如果没有,请仔细检查tsconfig.json配置和文件路径。
- 一切正常的话,
packages/nodes-base/package.json文件的n8n.nodes字段中会包含打包后的节点文件。如果没有则需要手动添加1
2
3
4
5
6
7
8{
"n8n": {
"nodes": [
...,
"dist/nodes/CustomNode/CustomNode.node.js"
]
}
}
验证:
打开 n8n UI,在节点面板中搜索你的节点 displayName (例如:”My Awesome Custom Node” 或 name “myAwesomeCustomNode”)。你应该就能看到并使用它了。