Is there a way to reference a specific module version when adding modules to a function node?
I tried with a module name like this "mymodule@0.1.0" and the logs showed that this specific version has been installed successfully, but right after the logs says:
You can't do it in a function node, but you can do it in package.json
If you look there after you have installed the module you will see it there, along with a definition of valid versions. Make sure it stipulates only the correct version and it will always be that version. Provided you do not install a different version instead.
Actually you can as I recently discovered. Try it out with the dummy package, try adding aaa@0.0.1 and you will see that it installs that version instead of the latest 0.0.2.
This is exactly what i tried, adding the module name incl. the version qualifier. It installs the specified version and I see it in the dependencies, but the Node-Red log prompts with "Error: Cannot find module 'mymodule@0.1.0'".
So, referencing a specific in the "Modules" list does not fully work. It installs the modules in the specified version, but it can't load it, because it look for a module name 'mymodule@0.1.0' although it is installed with name 'mymodule'.
My workaround: I will not use 'Modules' feature in the function node, will install the module with a classic "npm install mymodule@0.1.0" in my docker initialization, make it a global requirement in the 'settings.js' and get it via 'const myMod = global.get("mymodule");'
Thanks for the update. I think that is actually a bug so you might want to raise an issue against the node-red repo.
Since you can install with a version modifier, node-red should really be able to cope with that or should reject the install. I know that on uibuilder, which has a similar interface for loading npm modules that are mounted as web endpoints, it does cope with version modifiers.