diff --git a/packages/core/src/extension.ts b/packages/core/src/extension.ts index 3a7553b..f9d1be5 100644 --- a/packages/core/src/extension.ts +++ b/packages/core/src/extension.ts @@ -13,13 +13,15 @@ function findManifests(dir: string): string[] { const path = requireImport("path"); const ret = []; - for (const file of fs.readdirSync(dir)) { - if (file === "manifest.json") { - ret.push(path.join(dir, file)); - } + if (fs.existsSync(dir)) { + for (const file of fs.readdirSync(dir)) { + if (file === "manifest.json") { + ret.push(path.join(dir, file)); + } - if (fs.statSync(path.join(dir, file)).isDirectory()) { - ret.push(...findManifests(path.join(dir, file))); + if (fs.statSync(path.join(dir, file)).isDirectory()) { + ret.push(...findManifests(path.join(dir, file))); + } } } diff --git a/packages/core/src/patch.ts b/packages/core/src/patch.ts index 3ba5ca0..f4bf3a2 100644 --- a/packages/core/src/patch.ts +++ b/packages/core/src/patch.ts @@ -148,12 +148,15 @@ function patchModules(entry: WebpackJsonpEntry[1]) { const wrapped = `(${moduleString}).apply(this, arguments)\n` + `//# sourceURL=Webpack-Module-${id}`; - entry[id] = new Function( - "module", - "exports", - "require", - wrapped - ) as WebpackModuleFunc; + entry[id] = wrapTry( + new Function( + "module", + "exports", + "require", + wrapped + ) as WebpackModuleFunc, + id + ); entry[id].__moonlight = true; } } @@ -198,6 +201,20 @@ function handleModuleDependencies() { webpackModules = new Set(sorted.map((x) => x.data)); } +function wrapTry( + fn: WebpackModuleFunc, + moduleName?: string +): WebpackModuleFunc { + const tryFn: WebpackModuleFunc = function (module, exports, require) { + try { + return fn(module, exports, require); + } catch (e) { + logger.error("Failed to run Webpack module", moduleName, e); + } + }; + return tryFn; +} + const injectedWpModules: IdentifiedWebpackModule[] = []; function injectModules(entry: WebpackJsonpEntry[1]) { const modules: Record = {}; @@ -246,7 +263,7 @@ function injectModules(entry: WebpackJsonpEntry[1]) { inject = true; - if (wpModule.run) modules[id] = wpModule.run; + if (wpModule.run) modules[id] = wrapTry(wpModule.run, id); if (wpModule.entrypoint) entrypoints.push(id); } if (!webpackModules.size) break;