mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Handle subflow modules with their own npm dependencies
This commit is contained in:
@@ -308,15 +308,37 @@ function addModule(module) {
|
||||
throw new Error("Settings unavailable");
|
||||
}
|
||||
var nodes = [];
|
||||
if (registry.getModuleInfo(module)) {
|
||||
var existingInfo = registry.getModuleInfo(module);
|
||||
if (existingInfo) {
|
||||
// TODO: nls
|
||||
var e = new Error("module_already_loaded");
|
||||
e.code = "module_already_loaded";
|
||||
return Promise.reject(e);
|
||||
}
|
||||
try {
|
||||
var moduleFiles = localfilesystem.getModuleFiles(module);
|
||||
return loadNodeFiles(moduleFiles);
|
||||
var moduleFiles = {};
|
||||
var moduleStack = [module];
|
||||
while(moduleStack.length > 0) {
|
||||
var moduleToLoad = moduleStack.shift();
|
||||
var files = localfilesystem.getModuleFiles(moduleToLoad);
|
||||
if (files[moduleToLoad]) {
|
||||
moduleFiles[moduleToLoad] = files[moduleToLoad];
|
||||
if (moduleFiles[moduleToLoad].dependencies) {
|
||||
log.debug(`Loading dependencies for ${module}`)
|
||||
for (var i=0; i<moduleFiles[moduleToLoad].dependencies.length; i++) {
|
||||
var dep = moduleFiles[moduleToLoad].dependencies[i]
|
||||
if (!registry.getModuleInfo(dep)) {
|
||||
log.debug(` - load ${dep}`)
|
||||
moduleStack.push(dep);
|
||||
} else {
|
||||
log.debug(` - already loaded ${dep}`)
|
||||
registry.addModuleDependency(dep,moduleToLoad)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return loadNodeFiles(moduleFiles).then(() => module)
|
||||
} catch(err) {
|
||||
return Promise.reject(err);
|
||||
}
|
||||
|
Reference in New Issue
Block a user