TypeError: Cannot read properties of undefined (reading 'checkHealth')?
Hallo, ich habe einen error der mir sagt das checkHealth undefined ist wenn ich über npm devDeploy ausführe. Dort soll eigentlich meine Datei deployCommands.ts ausgeführt werden er geht aber erst in meine main.ts rein und dort tritt der fehler auf. Wenn ich aber nur dev ausführe was die main aufrufen soll und den Bot startet kommt kein fehler.
DeployCommands.ts: https://pastebin.com/5YAUhLfb
main.ts: https://pastebin.com/nWjvk3UD
package.json: https://pastebin.com/qV7ThnVW
Git Repo: https://github.com/luka-lta/byteBuddy_bot
/home/luka-lta/projects/PhpStorm/byteBuddy_bot/main.ts:6
ApiUtil.checkHealth().then((healthy) => {
^
TypeError: Cannot read properties of undefined (reading 'checkHealth')
at Object.<anonymous> (/home/luka-lta/projects/PhpStorm/byteBuddy_bot/main.ts:6:9)
at Module._compile (node:internal/modules/cjs/loader:1378:14)
at Module.m._compile (/home/luka-lta/.nvm/versions/node/v21.6.2/lib/node_modules/ts-node/src/index.ts:1618:23)
at Module._extensions..js (node:internal/modules/cjs/loader:1437:10)
at Object.require.extensions.<computed> [as .ts] (/home/luka-lta/.nvm/versions/node/v21.6.2/lib/node_modules/ts-node/src/index.ts:1621:12)
at Module.load (node:internal/modules/cjs/loader:1212:32)
at Function.Module._load (node:internal/modules/cjs/loader:1028:12)
at Module.require (node:internal/modules/cjs/loader:1237:19)
at require (node:internal/modules/helpers:176:18)
at Object.<anonymous> (/home/luka-lta/projects/PhpStorm/byteBuddy_bot/src/value/ByteBuddyChannel.ts:2:1)
1 Antwort
Meine Vermutung ist, dass der Pfad zum Modul falsch ist, aber müsste man jetzt die komplette Ordnerstruktur sehen. Vielleicht kannst Du das ja mal auf Github als Repo veröffentlichen und dann hier verlinken?
Die Funktion, die Du aufrufst, ist eine Variable (const bla = function () {}) und keine echte Funktion (function bla() {}). Der Unterschied ist, dass Variablen erst dann definiert sind, wenn der Code läuft. Echte Funktionen sind dagegen bereits früher definiert (die sammelt er sich zusammen, bevor der eigentliche Code läuft).
Wenn der Code jetzt läuft, bevor die Variablen aufgerufen werden, ist das gar kein Problem. In diesem Fall wird er das aber offensichtlich nicht.
Meistens kommt das durch zirkuläre Abhängigkeiten (wenn sich ein Modul in der Kette irgendwann wieder selbst importiert). Es kann aber auch damit zusammenhängen, dass Du hier eine Klasse mit statischen Feldern exportierst.
Ich würde empfehlen, die Funktionen separat zu exportieren und nicht als Klasse (das ist ohnehin übersichtlicher). Wenn Du die alle auf einmal importieren willst, kannst Du das dann immer noch mit import * as abc from './abc', auch wenn ich davon generell abraten würde, da man sich sonst schnell den Namespace vollmüllt.
Ich würde außerdem keine Variablen exportieren, sondern echte Funktionen (function bla() {}). Abgesehen davon, dass Dein Code dann vermutlich funktioniert, wird dadurch auch die Reihenfolge der Funktionen irrelevant.
Zu guter Letzt würde ich noch prüfen, ob nicht doch eine zirkuläre Abhängigkeit existiert, denn auch wenn die Funktionen so wahrscheinlich erst mal funktionieren werden, möchtest Du ja eventuell irgendwann Variablen exportieren, wo das Problem dann wieder aufträte.
Danke für die ausführliche erklärung. Was mir bisher noch unklar ist warum es bei dem Commit noch funktioniert hatte und direkt nach den commits nicht mehr. Der unterschied davon ist nicht gerade groß und habe das auch schon mal verglichen aber finde keinen auschlaggebenden punkt: https://github.com/luka-lta/byteBuddy_bot/tree/d2960fbc7b87f3567ade4ecfe78a5a9c84a0b3cc
Klar hier ist mein repo: https://github.com/luka-lta/byteBuddy_bot