diff --git a/electron/src/mods/loader.ts b/electron/src/mods/loader.ts index 093df329..d18f571e 100644 --- a/electron/src/mods/loader.ts +++ b/electron/src/mods/loader.ts @@ -63,7 +63,7 @@ export class ModLoader extends EventEmitter { this.locators.set("dev", devLocator); // If requested, restart automatically when dev mods are modified - devLocator.fsWatcher?.on("all", () => this.forceReload()); + devLocator.fsWatcher?.on("all", this.delayedForceReload()); } /** @@ -115,6 +115,16 @@ export class ModLoader extends EventEmitter { return this.mods.find(mod => mod.metadata.id === id); } + private delayedForceReload() { + // Debounce the force reload manually as chokidar won't aggregate events the way we want + // NOTE: The delay chosen here (250ms) is quite arbitrary! + let timeout: NodeJS.Timeout | undefined = undefined; + return () => { + clearTimeout(timeout); + timeout = setTimeout(() => this.forceReload(), 250); + }; + } + private async locateAllMods(): Promise { // Sort locators by priority, lowest number is highest priority const locators = [...this.locators.entries()].sort(([, a], [, b]) => a.priority - b.priority); diff --git a/electron/src/mods/locator.ts b/electron/src/mods/locator.ts index 66dcd562..112468a6 100644 --- a/electron/src/mods/locator.ts +++ b/electron/src/mods/locator.ts @@ -179,8 +179,6 @@ export class DevelopmentModLocator implements ModLocator { this.fsWatcher = chokidar.watch(this.modFiles, { persistent: false, ignoreInitial: true, - awaitWriteFinish: true, - atomic: true, }); }