[NodeJS] - Shared Vars und Module - Könnte mir das jemand kurz erklären?
Also. Ich schreibe gerade an einem kleinen Twitch-Bot, welcher inzwischen nicht mehr klein ist. Ich möchte einige Javascript-Funktionen gern "auslagern" (Grundlegende Funktionen, Hilfsfunktionen usw.) Jedoch nutzen diese global gesetzte Konstanten. Beispiel:
var seed = 0x93FC28B9;
function alterSeed() {
seed=(seed<<1)&0xFFFFFFFF;
}
Wie krieg ich das jetzt hin, die alterSeed-Funktion in eine separate module-datei auszulagern, wobei immernoch die seed-variable verändert werden würde?
Quasi so:
help.js
module.export = {
alterSeed: () => {
<root>.seed=(<root>.seed<<1)&0xFFFFFFFF;
}
}
main.js
const help = require("./help");
var seed = 1234;
help.alterSeed();
(Wobei <root> die mir unbekannte kern-zugriffs-variable darstellen würde)
Hierbei möchte ich NICHT auf Übergabe von Parametern setzen, da dies nur eine Beispiel-Funktion ist, der eigentliche Code inzwischen mit über 3000 Zeilen durchaus unübersichtlicher und komplexer ist. ...
Kann mir da jemand tipps geben, helfen, was erklären usw?
Dankö :)
1 Antwort
a) Du hängst die Daten als Properties eines Objekts an dein Modul.
Beispiel:
// shared.js
module.exports = { someValue: 123 };
// otherScript.js
const data = require("./shared.js");
console.log(data.someValue); // 123
data.someValue = 456;
console.log(data.someValue); // 456
b) Du kannst globale Variablen auch an das global-Objekt hängen (für Funktionen würde ich weiterhin auf Module setzen).
Beispiel:
global.someValue = 123;
// in any script:
console.log(global.someValue); // 123
global.someValue = 456;
console.log(global.someValue); // 456
In beiden Fällen musst du natürlich aufpassen, dass der Wert unter Umständen von jeglichem Modul geändert werden könnte und Wertänderungen aufgrund des asynchronen Ablaufs des Programms womöglich nicht mehr leicht nachvollziehbar sind. Es wäre ratsam, zumindest mit Getters und Setters zu arbeiten, um wenigstens eine Zwischenschnittstelle zu haben.
global.sharedData = {
someValue: 123,
get someValue() {
return this.someValue;
}
set someValue(value) {
this.someValue = value;
}
};