Ich habe ein bisschen rumprobiert und folgendes getan:
- Verzeichnis
/opt/iobroker/node_modules/ioBroker.javascript/node_modules/mymodules
angelegt npm init
darin ausgeführt- Folgendes in die
index.js
geschrieben
let modules = {};
let instance = null;
let initialized = null;
// above only boilerplate code
modules.inspect = function() {
return {
initialized() {
return initialized;
},
instance() {
return instance;
}
}
}()
// below only boilerplate code
module.exports = function(js_instance) {
if (!instance) {
console.log("Initializing modules");
initialized = new Date();
instance = js_instance;
}
return modules;
}
mymodules
in der Adapterkonfiguration zu den benötigten Modulen hinzugefügt- Um zu prüfen, ob meine Datenstrukturen auch wirklich nur einmal initialisiert werden, habe ich zwei identische Skripte mit folgendem Inhalt angelegt:
const mymodules = require('mymodules')(this);
console.log(mymodules.inspect.initialized());
Beide Skripte geben den gleichen Zeitstempel aus, wodurch ich davon ausgehe dass die Initialisierung tatsächlich nur einmal stattgefunden hat. Ich kann nun (und man möge mich bitte korrigieren wenn ich einen Denkfehler gemacht habe!) an beliebigen Stellen in meinen Skripten - vorzugsweise am Anfang wo this
noch ganz eindeutig definiert ist - mit einem
const mymodules = require('mymodules')(this);
auf meine Module zugreifen
Nächste Schritte:
- Module selber auch wieder per
require
in das "Obermodul" einbinden - Irgendwie so hosten, dass ich bequeme Versionsverwaltung habe aber es trotzdem nicht öffentlich machen muss (Hat jemand eine Idee?)
Danke für eure guten Ideen und ich bin immer offen für Verbesserungsvorschläge!