Using ES6 module in node-red

I have created a program that creates company profiles by extracting data from several rest api's, web scraping and so on. I Just came across node-red and I wanted to use it to visualize the steps that my code does when data flows through and gets enriched.

The code is written as an ES6 module and I use: import { myfunction} from "mymodule"; I also use the module in the nextjs part of my system so I can't just rewrite it to javascript.

I'd like to use functions from my library/module in node-red. Tried to set "type": "module" in package.json But that did not work. There must be some best practices to do this. I find it hard to believe that es6 modules cannot be used with node-red.

Have you tried dynamic import?

e.g.

let module = await import('/modules/my-module.js');

(requires Nodejs 13 or greater)

Perhaps I have misunderstood you, but can't you do it like I did here? In my case I have defined the class in another npm package.
Bart

@BartButenaers can you fix your here link - it isn't going anywhere at the moment and we're curious to see what you're linking to :wink:

I have fixed the link. But I think I have misinterpreted the question, and therefore I have a feeling you will be very disappointed after opening my link...

I personally find this a really annoying aspect of Node.js in that it doesn't behave the same way as using ECMAScript modules in a browser.

I think you have a number of options but I'm not sure that all of them will play nicely with Node-RED as I've not tried.

  • rename your module to .mjs instead of .js and Node will automatically treat it as an ECMAScript module.
  • use your package.json to mark your code as a module - the "type" property (which you've already tried)
  • use a build step to translate - this is most likely to be the most compatible option.

Really, it looks like you need to be using Node.js v12.20 or newer if working with ECMAScript modules.