贡献社区:将你开发的 n8n 自定义节点发布到 npm 并在本地安装测试

2026-01-27 14 0

别让你的代码在角落吃灰

兄弟,代码写完了,工作流跑通了,然后呢?

贡献社区:将你开发的 n8n 自定义节点发布到 npm 并在本地安装测试

笔者在 N8N大学 社区里,见过太多开发者把“轮子”造得飞快,却卡在了发布这一步。你辛辛苦苦开发的 n8n 自定义节点,如果只躺在你的本地硬盘里,那就太可惜了。它不仅无法复用,更失去了和全球开发者交流的机会。

今天,作为你的“引路人”,笔者就带你走通这临门一脚。我们将把你的节点发布到 npm 包管理器,并教你如何在本地 n8n 环境中通过 CLI 工具安装并测试它。走通这套流程,你就是 n8n 社区的贡献者。

准备工作:磨刀不误砍柴工

在出发前,我们需要确认你的“装备”是否齐全。别等到执行命令时报错才回头找依赖。

你需要具备以下硬性条件:

  • Node.js 环境:确保你的电脑上安装了 Node.js (建议 v16 或更高版本),并且 npm 命令可用。
  • n8n 自定义节点项目:你已经完成了节点的开发,且项目结构符合 n8n 官方推荐的脚手架(通常是基于 n8n-node-starter 模板)。
  • 一个 npm 账号:如果你还没有,请先去 npmjs.com 注册一个。记住你的用户名和密码,或者提前配置好 Token(推荐后者,更安全)。
  • 一个运行中的 n8n 实例:可以是本地安装的,也可以是 Docker 容器,只要能访问即可。

核心实操:从代码到 npm 包

这部分是重头戏。我们将分三步走,把你的“私有代码”变成“公共物资”。

步骤一:代码“体检”与配置修正

在发布前,必须检查 package.json 文件。这是 npm 识别你包的“身份证”。

重点关注以下字段:

  • name:包名必须是全局唯一的。建议采用 n8n-nodes- 的格式,例如 n8n-nodes-my-cool-node。如果名字被占用了,npm 会报错。
  • version:版本号。第一次发布建议写 1.0.0。遵循语义化版本控制(Major.Minor.Patch)。
  • main:指向编译后的入口文件,通常是 dist/index.js
  • files:告诉 npm 哪些文件需要被打包上传。通常必须包含 dist 目录。

笔者提示:如果你的项目使用了 TypeScript,记得先运行 npm run build。很多新手忘了编译,上传上去的是一堆 .ts 源码,导致别人无法使用。

步骤二:登录 npm 与发布

打开你的终端(Terminal),进入你的项目根目录。

首先,检查你当前是否登录:

npm whoami

如果提示未登录或报错,请执行:

npm login

按照提示输入用户名、密码和邮箱。如果开启了双重验证(2FA),需要输入一次性密码。

确认登录成功后,执行发布命令:

npm publish

如果一切顺利,你会看到一串绿色的“Success”字样。恭喜你,你的节点已经在全球 npm 仓库中“上市”了!

步骤三:在本地 n8n 中安装与测试

发布成功不代表万事大吉,我们得确保它真的能在 n8n 里跑起来。这步操作能让你在正式推送到 GitHub 前发现潜在 bug。

假设你的 n8n 是通过 Docker 或本地命令行运行的,你需要找到 n8n 的安装目录或容器环境。

方法 A:通过 CLI 安装(推荐)

如果你的 n8n 是全局安装的(npm install -g n8n),你可以直接在终端运行:

n8n install:nodes --npm n8n-nodes-

这个命令会自动下载你的包并将其路径写入 n8n 的配置中。

方法 B:通过环境变量挂载(Docker 用户常用)

如果你是通过 Docker 运行 n8n,可以将 npm 包挂载到容器内部:

docker run -it --rm 
  --name n8n 
  -p 5678:5678 
  -v ~/.n8n:/home/node/.n8n 
  -e N8N_CUSTOM_EXTENSIONS="/home/node/.n8n/n8n-nodes-" 
  docker.n8n.io/n8nio/n8n

避坑指南:安装完节点后,必须重启 n8n 服务(或者重启 Docker 容器)。否则,你在节点列表里是看不到新节点的。

避坑指南:那些年我们踩过的坑

发布过程看似简单,但笔者见过太多人在细节上翻车。以下是两个最高频的报错场景:

1. 401 Unauthorized / 403 Forbidden

npm ERR! 403 Forbidden - PUT https://registry.npmjs.org/...

原因分析:通常是因为你没有登录,或者你试图发布一个与现有公共包重名的包(你没有权限覆盖别人的包)。如果你要发布私有包(Scoped package),比如 @yourname/n8n-nodes-xxx,你需要支付 npm 费用或者设置为私有。

2. 节点安装后不显示

原因分析:除了忘记重启 n8n,最常见的原因是 package.json 中的 n8n 字段配置错误。n8n 依靠这个字段来识别节点。请确保你的项目结构如下所示:

{
  "name": "n8n-nodes-xxx",
  "n8n": {
    "n8nNodesApiVersion": 1,
    "credentials": [],
    "nodes": [
      "dist/nodes/MyNode/MyNode.node.js"
    ]
  }
}

确保 dist 目录下的路径指向了真实的编译文件。

FAQ 问答

Q1: 我发布的节点是私有的,不想让别人搜到,怎么办?
A: 如果你不想开源,可以使用 Scoped 包名(例如 @yourname/n8n-nodes-xxx),并将 package.json 中的 private 属性设为 true。或者,你可以直接将代码托管在 GitHub 上,通过 Git 地址直接安装(例如 npm install git+https://github.com/your/repo.git),而无需发布到 npm。

Q2: 发布后我发现有 Bug,修改后怎么更新?
A: 只需要修改代码,然后在 package.json 中将 version 加 1(例如从 1.0.0 改为 1.0.1),再次运行 npm publish 即可。用户下次安装或更新时会自动拉取新版本。

Q3: 为什么我的节点在 n8n 编辑器界面显示为“Unknown”?
A: 这通常是节点类名(Class Name)与文件名不匹配导致的。检查你的代码中 export class MyNode ...package.json 里定义的节点文件路径是否一致。同时也可能是编译后的 JS 文件缺少了默认导出。

总结与资源

将自定义节点发布到 npm,不仅是技术能力的证明,更是你参与开源社区的入场券。通过 CLI 工具在本地安装测试,能让你在公开发布前拥有足够的信心。

在 N8N大学,我们鼓励每一位开发者迈出这一步。如果你在发布过程中遇到任何报错,欢迎在社区留言,笔者会亲自为你排忧解难。

延伸阅读:

相关文章

安全加固:限制 n8n Code 节点访问文件系统与内网 IP (Sandbox 配置)
超越 SQLite:为什么生产环境必须连接 PostgreSQL 以及如何配置?
高并发架构:配置 Redis + n8n Worker 模式实现分布式任务处理
解决 OOM 崩溃:优化 n8n 大数据量处理时的内存占用 (Memory Leak) 技巧
多入口触发:如何让一个工作流同时支持 GET/POST 甚至多个不同路径的 Webhook?
控制 n8n 本身:使用 n8n Public API 自动创建、激活或导出工作流

发布评论