构建编程风格节点#
本教程将逐步指导如何构建编程风格节 点。开始前请确认这是您所需的节点构建方式。更多信息请参阅选择节点构建方法。
前置要求#
您的开发环境需要安装以下组件:
- git
- Node.js 和 npm。最低版本要求 Node 18.17.0。Linux、Mac 和 WSL 用户可参考此指南通过 nvm(Node版本管理器)安装。Windows 用户请参阅微软的在Windows上安装NodeJS指南。
需要具备以下知识基础:
- JavaScript/TypeScript
- REST API
- git
- n8n 中的表达式
构建节点#
本节将克隆 n8n 的节点入门仓库,并构建一个集成 SendGrid 的节点。您将创建一个实现 SendGrid 单功能特性的节点:添加联系人。
现有节点说明
n8n 已内置 SendGrid 节点。为避免与现有节点冲突,您需要为新版本节点设置不同名称。
步骤1:项目设置#
n8n 提供了节点开发的入门仓库。使用该入门模板可确保获得所有必要依赖,同时包含代码检查工具。
克隆仓库并进入目录:
- 基于模板仓库生成新仓库
- 克隆您的新仓库:
git clone https://github.com/<your-organization>/<your-repo-name>.git
n8n-nodes-friendgrid cd n8n-nodes-friendgrid
该启动器包含示例节点和凭据。请删除以下目录和文件:
nodes/ExampleNodenodes/HTTPBincredentials/ExampleCredentials.credentials.tscredentials/HttpBinApi.credentials.ts
现在创建以下目录和文件:
nodes/FriendGrid
nodes/FriendGrid/FriendGrid.node.json
nodes/FriendGrid/FriendGrid.node.ts
credentials/FriendGridApi.credentials.ts
这些是任何节点所需的关键文件。有关必需文件及推荐组织结构的更多信息,请参阅节点文件结构。
现在安装项目依赖:
npm i
步骤2:添加图标#
将 此处 的 SendGrid SVG 徽标另存为 nodes/FriendGrid/ 目录下的 friendGrid.svg 文件。
n8n 推荐使用 SVG 格式作为节点图标,但也可使用 PNG 格式。若使用 PNG,图标分辨率应为 60x60 像素。节点图标的宽高比应保持为正方形或接近正方形。
禁止直接引用 Font Awesome
如需在节点中使用 Font Awesome 图标,请下载图像并嵌入本地文件。
步骤3:在基础文件中定义节点#
每个节点都必须具备基础文件。有关基础文件参数的详细信息,请参阅节点基础文件。
本示例中的文件为 FriendGrid.node.ts。为简化教程,所有节点功能将集中在此单一文件中。构建复杂节点时,建议将功能拆分至不同模块。更多信息请参阅节点文件结构。
步骤3.1:导入声明#
首先添加导入声明:
import {
IExecuteFunctions,
} from 'n8n-core';
import {
IDataObject,
INodeExecutionData,
INodeType,
INodeTypeDescription,
NodeConnectionType
} from 'n8n-workflow';
import {
OptionsWithUri,
} from 'request';
步骤 3.2:创建主类#
节点必须导出一个实现 INodeType 的接口。该接口必须包含 description 接口,而该接口又需包含 properties 数组。
类名与文件名规范
请确保类名与文件名保持一致。例如,若类名为 FriendGrid,则文件名必须为 FriendGrid.node.ts。
export class FriendGrid implements INodeType {
description: INodeTypeDescription = {
// Basic node details will go here
properties: [
// Resources and operations will go here
],
};
// The execute method will go here
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
}
}
步骤 3.3:添加节点详情#
所有可编程节点都需要一些基本参数,例如显示名称和图标。请将以下内容添加到 description 中:
displayName: 'FriendGrid',
name: 'friendGrid',
icon: 'file:friendGrid.svg',
group: ['transform'],
version: 1,
description: 'Consume SendGrid API',
defaults: {
name: 'FriendGrid',
},
inputs: [NodeConnectionType.Main],
outputs: [NodeConnectionType.Main],
credentials: [
{
name: 'friendGridApi',
required: true,
},
],
n8n 使用 description 中设置的某些属性在编辑器界面中渲染节点。这些属性包括 displayName、icon 和 description。