PublishFlows allows developers to publish flows from their projects for use in other projects. Developers can publish flows specific to tabs, subflows, or arbitrary asset files that live in the project's folder. PublishFlows brings the concept found in other programming languages often referred to as a requirement, include, or dependency to Node-RED flows.
Combined with ActionFlows, PublishFlows can allow developers to create more modular, extendable, and versatile designs to otherwise bulky and complex flows.
Publish option under project settings to define the parts of your
project that you wish to make available to other projects. A project that wishes
to use the published flows may simply list your project as a dependency. Use
- Create templates and blueprints to jump start new projects
- Breakup complex projects into smaller sub-projects
- Lock project dependencies to a specific version
- Separate test flows from runtime flows
- Update projects independently
- Make re-usable components
How It Works
A project that lists another project as a dependency will automatically have its predefined components (tabs, subflows, arbitrary asset files) merged into the current project; overwriting/updating any existing nodes that share the same I.D.
Only the declared parts from the PublishFlows' project will be copied and merged. The declared parts are stored in the project folder within a file called manifest.js. The manifest file lists the components that are to be shared and used within other projects. Users of the dependent project should avoid editing the imported components as they will be overwritten with the dependency content.
For example, say you have produced a subflow that you would like to reuse in other projects. Here we have created a subflow with an inject node and debug node that prints "Hello World!" in the debug window. This subflow is maintained within the project called pf-test.
Simply create a project that houses your subflow; perhaps include an example tab that uses the subflow to illustrate its use. We will only publish the subflow, not the example tab. Under Project Settings (1) from the right side menu or '...' Project info button, select the (2) Publish tab followed by (3) checkmarking the "Test Subflow".
Clicking (4) close will cause PublishFlows to automatically generate a (5) manifest.js file listing the "Test Subflow" for others to use in their projects. Additional changes are made to your project's package.json so that your project can be included as a dependency within Node-RED's Dependencies panel.
Using the Example Scenario "Test Subflow" in Your Project
Now you can use the "Test Subflow" in your own/multiple other projects; maintaining the original "Test Subflow" separately within the project pf-test.
Create a new project. Use the Project Settings menu option from the right side menu or (1) click the '...' project info button and select the (2) Dependencies tab. Ensure you have PublishFlows installed, or add it as a dependency. From here, you may click the (3) "edit" button to edit the list of project dependencies. The example pf-test project containing the subflow "Test Subflow" can be used in our own project by listing it in the dependencies section.
Because the pf-test project is hosted on github.com, we can use NodeJS' abbreviated format to list the item as a dependency. Your own github based projects can be easily referred to by just typing your username, forward slash, the project name, hashtag, master. I.e. steveorevo/pf-test#master refers to our example dependency. Type the dependency definition in the (1) textarea followed by clicking the (2) Done button (see image below).
Master refers to the main development branch in the github repo. However, you can lock or refer to a specific compatible release version following NPM's documentation for the dependencies section.
Note: As of Node-RED version 0.19.4, you may encounter a bug whereby a newly listed dependency vanishes after clicking the install button. You can safely ignore this or close/re-open the Project Settings panel to refresh the list.
After listing all of your project's dependencies, you may click the (1) merge publishflows button as shown below; followed by clicking the (2) merge button in Node-RED's confirmation dialog. You can distinguish dependencies that use the PublishFlows node from other dependencies as they will appear with a different (3) green tinted and pyramid cubed icon. If all goes well, you should now see the "Test Subflow" node in your project's sidebar. You've just created a project that uses another project as a dependency.
Removing a PublishFlows Project Dependency
PublishFlows makes it easy to remove a PublishFlows based project dependency. Simply use Node-RED's native "remove from project" button under the dependencies panel of the project's settings. You will be prompted with a Node-RED confirmation dialog with three options: Cancel, Keep, and Remove. Cancel, simply ignores the operation. Keep allows you to keep the flows and/or files that were imported prior in the "merge publishflows" operation while removing the dependency listing in your package.json file. Lastly, Remove removes both the dependency from your project's package.json file and scans the dependency's manifest file to remove any assets (flows and/or files) from your current project.
What to Publish
A PublishFlows project should only publish elements that it wishes to furnish to other projects. A project should avoid publishing irrelevant items such as test flows, examples, etc. as excess components would persist during a merge, or may cause unnecessary bulk, and/or may inhibit code reuse for the referring project.
If components in a PublishFlows project are deemed optional; consider breaking down the dependency into multiple PublishFlow projects and dependencies. A dependency that requires elements from another project should re-list them as items to publish in their own "Publish" definition to avoid missing dependent elements.
- Examples (if users want examples, they can always clone your project)
- Unused actionflows and nodes (keep the namespace clean and tidy)
- Flows from dependencies that are needed to make your published flows work
- Comment nodes giving credit to original authors
- Flows that can be re-used in other projects
Run the following command in your Node-RED user directory (typically ~/.node-red):
npm install node-red-contrib-publishflows
A new option will appear under the Projects panel titled, "Publish". The Publish tab will show a tree control to select subflows, tabs, and other asset files.