在Node-red 二次开发中,若需要新增内置节点,可以采用以下2步实现。
(本文不涉及如何创建节点文件,请参考官网说明,以下操作是基于Node-Red 3.0.0-beta.1源码)
第1步:
在node_modules/@node-red/nodes目录下创建一个文件夹(也可以不创建,直接丢到其下已有的文件夹中)。文件夹名字自己取,我这取的名字叫custom,但要特别注意,文件名不能是lib | icons |node_modules | test | locales中的其中任意一个。(详细见localfilesystem.js里的getLocalNodeFiles(dir)方法)
第2步:
创建好文件夹后,就可以把自己的节点文件放到这个文件夹里了,系统启动时会自动扫描到。用这种方法是不需要把它的package.json放进来的。
看效果:
复制以下代码,可以导入流程。
[{"id":"25e05be9e5fe760d","type":"tab","label":"流程 2","disabled":false,"info":"","env":[]},{"id":"60281404547d2b21","type":"lower-case1","z":"25e05be9e5fe760d","name":"","x":370,"y":200,"wires":[["ad69c4ff1c949e05"]]},{"id":"cdda142825caa213","type":"inject","z":"25e05be9e5fe760d","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"aDFDFFDF","payloadType":"str","x":170,"y":200,"wires":[["60281404547d2b21"]]},{"id":"ad69c4ff1c949e05","type":"debug","z":"25e05be9e5fe760d","name":"debug 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":540,"y":200,"wires":[]}]
相关演示文件的内容(在官网可查)
lower-case.html
<script type="text/javascript">
RED.nodes.registerType('lower-case1',{
category: 'function',
color: '#a6bbcf',
defaults: {
name: {value:""}
},
inputs:1,
outputs:1,
icon: "file.png",
label: function() {
return this.name||"lower-case";
}
});
</script>
<script type="text/html" data-template-name="lower-case1">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>
<script type="text/html" data-help-name="lower-case1">
<p>A simple node that converts the message payloads into all lower-case characters</p>
</script>
lower-case.js
module.exports = function(RED) {
function LowerCase1Node(config) {
RED.nodes.createNode(this,config);
var node = this;
node.on('input', function(msg) {
msg.payload = msg.payload.toLowerCase();
node.send(msg);
});
}
RED.nodes.registerType("lower-case1",LowerCase1Node);
}