Hi, I managed to break something when messing around and I was reminded of an annoying oversight in loader.js
.
Around lines 78 to 98, there are a couple of try/catch sections but the catch does not really show anything useful.
Here is an example from my recent log:
Welcome to Node-RED
===================
0|Node-RED |
18 Jul 10:19:34 - [info] Node-RED version: v4.1.0-beta.2
18 Jul 10:19:34 - [info] Node.js version: v22.15.0
18 Jul 10:19:34 - [info] Windows_NT 10.0.26100 x64 LE
18 Jul 10:19:35 - [info] Loading palette nodes
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
at Object.dirname (node:path:739:5)
at loadNodeLocales (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:234:35)
at loadPluginConfig (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:331:11)
at loadModuleTypeFiles (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:83:31)
at loadModuleFiles (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:122:60)
at load (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:43:12)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5) {
code: 'ERR_INVALID_ARG_TYPE'
}
18 Jul 10:19:35 - [info] Node-RED Contrib Theme Collection version: v4.0.11
As you can see, this does not tell me which node/plugin failed to load.
Thankfully, there is a very easy fix for this:
try {
let promise;
if (type === "nodes") {
promise = loadNodeConfig(things[thingName]);
} else if (type === "plugins") {
promise = loadPluginConfig(things[thingName]);
}
promises.push(
promise.then(
(function() {
const n = thingName;
return function(nodeSet) {
things[n] = nodeSet;
return nodeSet;
}
})()
).catch(err => {console.log(`"${thingName}"`, err)})
);
} catch(err) {
console.log(`"${thingName}"`, err)
}
}
Notice the addition of thingName
to the log output. Which means that we now get to see what node/plugin caused the issue:
Welcome to Node-RED
===================
0|Node-RED |
18 Jul 10:29:20 - [info] Node-RED version: v4.1.0-beta.2
18 Jul 10:29:20 - [info] Node.js version: v22.15.0
18 Jul 10:29:20 - [info] Windows_NT 10.0.26100 x64 LE
18 Jul 10:29:21 - [info] Loading palette nodes
"ti-dummy-runtime-plugin" TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
at Object.dirname (node:path:739:5)
at loadNodeLocales (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:234:35)
at loadPluginConfig (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:331:11)
at loadModuleTypeFiles (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:83:31)
at loadModuleFiles (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:122:60)
at load (D:\src\nr\node_modules\@node-red\registry\lib\loader.js:43:12)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5) {
code: 'ERR_INVALID_ARG_TYPE'
}
18 Jul 10:29:22 - [info] Node-RED Contrib Theme Collection version: v4.0.11
A nice easy fix.