Bytenode : Hide node JS source code - austral-electronics/Austral_Support GitHub Wiki
^ Back to Node-Red
TUTORIALS :
Bytenode :
- GitHub Bytenode
- How to Compile Node.js Code Using Bytenode?
- Compile nodejs using bytecode
- bytenode
- comment-compiler-le-code-node-js-en-utilisant-bytenode
Initialize the module:
cd ~/git mkdir private_module cd private_module npm init
Then respond like this :
package name: (private_module) private_module version: (1.0.0) description: Quantum private module entry point: (index.js) test command: git repository: keywords: author: license: (ISC)
Install bytenode in the project :
npm install bytenode --save
Create private.js : This is your private source file, it will be compiled in V8 and erase for production :
module.exports = {
print() {
console.log('works!');
},
sum(a,b) {
return a+b;
}
};
Compilation test of private.js : Create a private.jcs compiled file :
bytenode --compile private.js
Create index.js, This file re-export all private.jsc functions :
require('bytenode');
module.exports = require('./private.jsc');
Optionally, test your module in node JS first : You can also deploy and test directly in Node-Red :
Create test.js :
var tools = require('./index.js');
tools.print();
var value = tools.sum(10,20);
console.log('sum=' + value);
Launch the test:
node test.js
You must see : 👍
works! sum=30
Save your module : If you are in production, you must save the modifications in a private git and then remove private.js before publishing the NPM or installing it in node-red.
Deploy for production : Remove private source code, Stop node-red, Install the compiled module in node-red and relaunch node-red :
rm private.js && node-red-stop && cd ~/.node-red && npm install ~/git/private_module && node-red-start
Deploy in development : Compile, Stop node-red, Install the compiled module in node-red and relaunch node-red :
bytenode --compile private.js node-red-stop && cd ~/.node-red && npm install ~/git/private_module && node-red-start
Test your module in Node-Red : Create a test node-red function with :
const myTools = context.global.get('myTools');
myTools.print();
msg.payload=myTools.sum(10,20);
return msg;
Add an inject and a debug nodes to test it in the debug tab, you must see at each inject: 👍
msg.payload : number 30
And also in the node-red linux console.
works!
CREATE A COMPILED NODE-RED NODE :
Tutorial : the lower-case node example :
The compiled version of the lower-case node :Initialize a new node with 'lower-case-private' name.
Create a V8 directory for the compiled code :
mkdir V8
Install bytenode in this node :
npm install bytenode --save
Edit lower-case-private_V8.js (The file to hide in production)
module.exports = function(RED) {
function LowerCaseNode(config) {
RED.nodes.createNode(this,config);
var node = this;
node.status({fill:"blue",shape:"dot",text:"Started"});
//node.log("Started");
this.on('input', function(msg) {
//node.log("On input : " + msg.payload);
var nodeContext = this.context();
var init=nodeContext.get('init')||false;
if (init == false) {
init=true;
nodeContext.set('init',init);
node.status({fill:"green",shape:"dot",text:"Operational"});
//node.log("Init");
}
msg.payload = msg.payload.toLowerCase();
node.send(msg);
});
}
RED.nodes.registerType("lower-case-private",LowerCaseNode);
}
Edit lower-case-private.js
require('bytenode');
module.exports = require('./V8/lower-case-private_V8.jsc');
Edit lower-case-private.html
<script type="text/javascript">
RED.nodes.registerType('lower-case-private',{
category: 'function',
color: '#a6bbcf',
defaults: {
name: {value:""}
},
inputs:1,
outputs:1,
icon: "sailing_64.png",
label: function() {
return this.name||"lower-case-private";
}
});
</script>
<script type="text/x-red" data-template-name="lower-case-private">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>
<script type="text/x-red" data-help-name="lower-case-private">
<p>A private Austral demo node that converts the message payloads into all lower-case characters</p>
</script>
Compile the *_V8.js files and move them in V8 directory:
bytenode --compile *_V8.js && mv *.jsc V8
Deploy the node and relaunch node-red
The 'lower-case-private' node is now in node-red.
You can store the node in a private git and erase all *_V8.js source code in production.