节点可以作为模块打包并发布到 npm 仓库。这使得它们及其可能有的任何依赖项都易于安装。
我们于 2022 年 1 月 31 日更新了我们的命名要求。以下规定适用于在该日期之后首次发布的模块。
包应使用作用域名称 - 例如 @myScope/node-red-sample
。这可以是在用户作用域下,也可以是在组织作用域下。
在作用域名称下发布的节点对其名称没有进一步的要求。它们可以使用 @myScope/node-red-sample
或仅使用 @myScope/sample
- 尽管名称中包含 node-red
有助于将模块与项目关联起来。
如果您为了提供修复而复刻(fork)一个现有包,您可以保留相同的名称,但在您自己的作用域下发布。但请记住,只有在原始维护者对您的贡献没有响应时,复刻才应是最后的手段。
这是一个典型的节点包目录结构
├── LICENSE
├── README.md
├── package.json
├── examples
│ ├── example-1.json
│ └── example-2.json
└── sample
├── icons
│ └── my-icon.svg
├── sample.html
└── sample.js
对于包内使用的目录结构没有严格的要求。如果一个包包含多个节点,它们可以都存在于同一个目录中,也可以分别放在各自的子目录中。`examples` 文件夹必须位于包的根目录。
要在本地测试一个节点模块,可以使用 npm install <folder>
命令。这允许您在本地目录中开发节点,并在开发过程中将其链接到本地的 Node-RED 安装中。
在您的 Node-RED 用户目录(通常是 ~/.node-red
)中,运行
npm install <path to location of node module>
这会创建到该目录的相应符号链接,以便 Node-RED 在启动时能发现该节点。对节点文件的任何更改,只需重启 Node-RED 即可生效。
除了常规条目外,package.json
文件必须包含一个 node-red
条目,其中列出了要由运行时加载的包含节点的 .js
文件。
如果您在单个文件中有多个节点,您只需列出该文件一次。
如果任何节点依赖于其他 npm 模块,它们必须包含在 dependencies
属性中。
为了帮助节点在 npm 仓库中被发现,文件应在其 keywords
属性中包含 node-red
。这将确保该包在按关键字搜索时出现。
{
"name" : "@myScope/node-red-sample",
"version" : "0.0.1",
"description" : "A sample node for Node-RED",
"dependencies": {
},
"keywords": [ "node-red" ],
"node-red" : {
"nodes": {
"sample": "sample/sample.js"
}
}
}
您应该使用一个 version
条目来指定您的节点支持的 Node-RED 版本。例如,以下内容表示该节点需要 Node-RED 2.0 或更高版本。
"node-red" : {
"version": ">=2.0.0",
"nodes": {
"sample": "sample/sample.js"
}
}
README.md 文件应描述节点的功能,并列出使其正常工作所需的任何先决条件。包含节点 html 文件的 info 选项卡部分未包含的任何额外说明,甚至是一个演示其用法的小示例流,也可能很有用。
该文件应使用 GitHub 风格的 markdown 进行标记。
请包含一个许可证文件,以便他人了解他们可以用您的代码做什么和不能做什么。
有很多关于将包发布到 npm 仓库的指南。一个基本的概述可在此处找到。
自 2020 年 4 月起,Node-RED 流库不再能够自动索引和更新在 npm 上发布的带有 node-red
关键字的节点。相反,必须手动提交请求。
为此,请确保满足所有打包要求。要向库中添加新节点,请单击库页面顶部的 +
按钮,然后选择“node”选项。此按钮会将您带到添加节点页面。在这里,会重复列出要求,并描述将其添加到库中的步骤。
要更新现有节点,您可以像添加新节点一样重新提交它,或者通过节点在流库页面上的“请求刷新”链接来请求刷新。这仅对已登录用户可见。
如果在那之后它仍未出现,您可以在 Node-RED 论坛或 Slack 上寻求帮助。
版权所有 © OpenJS 基金会和 Node-RED 贡献者。保留所有权利。OpenJS 基金会拥有注册商标并使用商标。有关 OpenJS 基金会的商标列表,请参阅我们的商标政策和商标列表。未在 OpenJS 基金会商标列表中指明的商标和徽标是其各自所有者的商标™或注册®商标。使用它们并不意味着与它们有任何关联或得到它们的认可。
OpenJS 基金会 | 使用条款 | 隐私政策 | OpenJS 基金会章程 | 商标政策 | 商标列表 | Cookie 政策