Skip to content

Design: external file for function and templates nodes

Nathanaël Lécaudé edited this page May 15, 2017 · 6 revisions

Node-RED: External file proposal

The problem

Currently, the 3 code centric nodes (function, template and ui-template) load their code from a window within the node’s configuration page. While this approach works fine for small single-person projects, it gets complicated in a multi-user project hosted on GIT.

Doing diffs and merging flow files with a large number of functions or templates is a manual process now. This could be improved greatly if there was an option, in addition to the current mechanism, to load the code content of these nodes from a file on the user’s file system.

We know some third party nodes do this but we think this should be integrated in the code. The main downside of using third party nodes is they need to be kept up to date with the core to reflect changes in the function or template nodes which is not always the case. Having this in the core would ensure that everything it up to date.

Proposition

We propose the addition of a checkbox named Load from external file just above the code field. Checking this checkbox would make a field appear where the user can type the path to a file, similar to the file-in node. Given the fact some cloud environment are not compatible with a traditional file system, a setting named allowExternalFiles could be added in settings.js to disable this feature entirely. The feature could be disabled by default to avoid confusing new users.

In that mode, the code editor could show the code but in greyed out mode, similar to how the Arduino IDE works when using external files. Another option would be to be able to start prototyping a function in Node-RED's editor and have the option to then save it to file. Once save to disk, the editor would be in read-only mode and the file contents would update when the file is saved externally.

Exporting flows

This brings one problem, what happens when someone exports a flow ? We propose the addition of a checkbox in the flow export dialog named Embed external files that would embed the external file contents within the exported flow making sharing of that flow possible.

Another possibility would be to have some sort of Export project option that would export a zip file containing the flow file, settings.js, lib folder and external files.

Clone this wiki locally