diff --git a/red/nodes/registry.js b/red/nodes/registry.js index 65c788609..fb547f221 100644 --- a/red/nodes/registry.js +++ b/red/nodes/registry.js @@ -419,9 +419,22 @@ var registry = (function() { var removed = false; for (var mod in moduleConfigs) { if (moduleConfigs.hasOwnProperty(mod)) { - if (moduleConfigs[mod] && !moduleNodes[mod]) { - var nodes = moduleConfigs[mod].nodes; - for (var node in nodes) { + var nodes = moduleConfigs[mod].nodes; + var node; + if (mod == "node-red") { + // For core nodes, look for nodes that are enabled, !loaded and !errored + for (node in nodes) { + if (nodes.hasOwnProperty(node)) { + var n = nodes[node]; + if (n.enabled && !n.err && !n.loaded) { + registry.removeNode(mod+"/"+node); + removed = true; + } + } + } + } else if (moduleConfigs[mod] && !moduleNodes[mod]) { + // For node modules, look for missing ones + for (node in nodes) { if (nodes.hasOwnProperty(node)) { registry.removeNode(mod+"/"+node); removed = true; diff --git a/red/server.js b/red/server.js index e68626530..e8725d63d 100644 --- a/red/server.js +++ b/red/server.js @@ -81,7 +81,7 @@ function start() { for (i in missingModules) { if (missingModules.hasOwnProperty(i)) { log.warn(" - "+i+": "+missingModules[i].join(", ")); - if (settings.autoInstallModules) { + if (settings.autoInstallModules && i != "node-red") { installModule(i).otherwise(function(err) { // Error already reported. Need the otherwise handler // to stop the error propagating any further