From e6a845e6067cb27d9fcbde16924e0c697331fa50 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 13 Jul 2021 11:24:10 +0100 Subject: [PATCH] Move externalModules back into the user dir --- .../@node-red/registry/lib/externalModules.js | 23 +++++++++++++++---- .../runtime/locales/en-US/runtime.json | 3 ++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/node_modules/@node-red/registry/lib/externalModules.js b/packages/node_modules/@node-red/registry/lib/externalModules.js index ff33c08fd..14845b5cf 100644 --- a/packages/node_modules/@node-red/registry/lib/externalModules.js +++ b/packages/node_modules/@node-red/registry/lib/externalModules.js @@ -12,7 +12,6 @@ const log = require("@node-red/util").log; const hooks = require("@node-red/util").hooks; const BUILTIN_MODULES = require('module').builtinModules; -const EXTERNAL_MODULES_DIR = "externalModules"; // TODO: outsource running npm to a plugin const NPM_COMMAND = (process.platform === "win32") ? "npm.cmd" : "npm"; @@ -28,15 +27,30 @@ let installAllowList = ['*']; let installDenyList = []; function getInstallDir() { - return path.resolve(path.join(settings.userDir || process.env.NODE_RED_HOME || ".", "externalModules")); + return path.resolve(settings.userDir || process.env.NODE_RED_HOME || "."); } +let loggedLegacyWarning = false; async function refreshExternalModules() { - const externalModuleDir = path.resolve(path.join(settings.userDir || process.env.NODE_RED_HOME || ".", EXTERNAL_MODULES_DIR)); + + if (!loggedLegacyWarning) { + loggedLegacyWarning = true; + const oldExternalModulesDir = path.join(path.resolve(settings.userDir || process.env.NODE_RED_HOME || "."),"externalModules"); + if (fs.existsSync(oldExternalModulesDir)) { + try { + log.warn(log._("server.install.old-ext-mod-dir-warning",{oldDir:oldExternalModulesDir, newDir:getInstallDir()})) + } catch(err) {console.log(err)} + } + + } + + + const externalModuleDir = getInstallDir(); try { const pkgFile = JSON.parse(await fs.readFile(path.join(externalModuleDir,"package.json"),"utf-8")); knownExternalModules = pkgFile.dependencies; } catch(err) { + knownExternalModules = {}; } } @@ -44,6 +58,7 @@ function init(_settings) { settings = _settings; knownExternalModules = {}; installEnabled = true; + if (settings.externalModules && settings.externalModules.modules) { if (settings.externalModules.modules.allowList || settings.externalModules.modules.denyList) { installAllowList = settings.externalModules.modules.allowList; @@ -82,7 +97,7 @@ function requireModule(module) { e.code = "module_not_allowed"; throw e; } - const externalModuleDir = path.resolve(path.join(settings.userDir || process.env.NODE_RED_HOME || ".", EXTERNAL_MODULES_DIR)); + const externalModuleDir = getInstallDir(); const moduleDir = path.join(externalModuleDir,"node_modules",module); return require(moduleDir); } diff --git a/packages/node_modules/@node-red/runtime/locales/en-US/runtime.json b/packages/node_modules/@node-red/runtime/locales/en-US/runtime.json index 8babd7925..815f9239c 100644 --- a/packages/node_modules/@node-red/runtime/locales/en-US/runtime.json +++ b/packages/node_modules/@node-red/runtime/locales/en-US/runtime.json @@ -41,7 +41,8 @@ "uninstalling": "Uninstalling module: __name__", "uninstall-failed": "Uninstall failed", "uninstall-failed-long": "Uninstall of module __name__ failed:", - "uninstalled": "Uninstalled module: __name__" + "uninstalled": "Uninstalled module: __name__", + "old-ext-mod-dir-warning": "\n\n---------------------------------------------------------------------\nNode-RED 1.3 external modules directory detected:\n __oldDir__\nThis directory is no longer used. External Modules will be\nreinstalled in your Node-RED user directory:\n __newDir__\nDelete the old externalModules directory to stop this message.\n---------------------------------------------------------------------\n" }, "deprecatedOption": "Use of __old__ is DEPRECATED. Use __new__ instead", "unable-to-listen": "Unable to listen on __listenpath__",