MCPcopy Index your code
hub / github.com/MagicMirrorOrg/MagicMirror / loadModule

Function loadModule

js/app.js:77–139  ·  view source on GitHub ↗

* Loads a specific module. * @param {string} module The name of the module (including subpath).

(module)

Source from the content-addressed store, hash-verified

75 * @param {string} module The name of the module (including subpath).
76 */
77 function loadModule (module) {
78 const elements = module.split("/");
79 const moduleName = elements[elements.length - 1];
80 let moduleFolder = path.resolve(`${global.root_path}/${env.modulesDir}`, module);
81
82 if (defaultModules.includes(moduleName)) {
83 const defaultModuleFolder = path.resolve(`${global.root_path}/${global.defaultModulesDir}/`, module);
84 if (!global.mmTestMode) {
85 moduleFolder = defaultModuleFolder;
86 } else {
87 // running in test mode, allow defaultModules placed under moduleDir for testing
88 if (env.modulesDir === "modules" || env.modulesDir === "tests/mocks") {
89 moduleFolder = defaultModuleFolder;
90 }
91 }
92 }
93
94 const moduleFile = `${moduleFolder}/${moduleName}.js`;
95
96 try {
97 fs.accessSync(moduleFile, fs.constants.R_OK);
98 } catch {
99 Log.warn(`No ${moduleFile} found for module: ${moduleName}.`);
100 }
101
102 const helperPath = `${moduleFolder}/node_helper.js`;
103
104 let loadHelper = true;
105 try {
106 fs.accessSync(helperPath, fs.constants.R_OK);
107 } catch {
108 loadHelper = false;
109 Log.log(`No helper found for module: ${moduleName}.`);
110 }
111
112 // if the helper was found
113 if (loadHelper) {
114 let Module;
115 try {
116 Module = require(helperPath);
117 } catch (e) {
118 Log.error(`Error when loading ${moduleName}:`, e.message);
119 return;
120 }
121 let m = new Module();
122
123 if (m.requiresVersion) {
124 Log.log(`Check MagicMirror² version for node helper '${moduleName}' - Minimum version: ${m.requiresVersion} - Current version: ${global.version}`);
125 if (cmpVersions(global.version, m.requiresVersion) >= 0) {
126 Log.log("Version is ok!");
127 } else {
128 Log.warn(`Version is incorrect. Skip module: '${moduleName}'`);
129 return;
130 }
131 }
132
133 m.setName(moduleName);
134 m.setPath(path.resolve(moduleFolder));

Callers 1

loadModulesFunction · 0.70

Calls 4

setNameMethod · 0.80
setPathMethod · 0.80
loadedMethod · 0.80
cmpVersionsFunction · 0.70

Tested by

no test coverage detected