diff --git a/src/Util/JavaScriptDependencies.js b/src/Util/JavaScriptDependencies.js index b03658963..7f6e80939 100644 --- a/src/Util/JavaScriptDependencies.js +++ b/src/Util/JavaScriptDependencies.js @@ -2,7 +2,13 @@ import dependencyTree from "@11ty/dependency-tree"; import { find } from "@11ty/dependency-tree-esm"; import { TemplatePath } from "@11ty/eleventy-utils"; +import EleventyBaseError from "../Errors/EleventyBaseError.js"; + class JavaScriptDependencies { + static getErrorMessage(file, type) { + return `A problem was encountered looking for JavaScript dependencies in ${type} file: ${file}. This only affects --watch and --serve behavior and does not affect your build.`; + } + static async getDependencies(inputFiles, isProjectUsingEsm) { let depSet = new Set(); @@ -12,15 +18,19 @@ class JavaScriptDependencies { ); for (let file of commonJsFiles) { - let modules = dependencyTree(file, { - nodeModuleNames: "exclude", - allowNotFound: true, - }).map((dependency) => { - return TemplatePath.addLeadingDotSlash(TemplatePath.relativePath(dependency)); - }); - - for (let dep of modules) { - depSet.add(dep); + try { + let modules = dependencyTree(file, { + nodeModuleNames: "exclude", + allowNotFound: true, + }).map((dependency) => { + return TemplatePath.addLeadingDotSlash(TemplatePath.relativePath(dependency)); + }); + + for (let dep of modules) { + depSet.add(dep); + } + } catch (e) { + throw new EleventyBaseError(this.getErrorMessage(file, "CommonJS"), e); } } @@ -28,9 +38,13 @@ class JavaScriptDependencies { (file) => (isProjectUsingEsm && file.endsWith(".js")) || file.endsWith(".mjs"), ); for (let file of esmFiles) { - let modules = await find(file); - for (let dep of modules) { - depSet.add(dep); + try { + let modules = await find(file); + for (let dep of modules) { + depSet.add(dep); + } + } catch (e) { + throw new EleventyBaseError(this.getErrorMessage(file, "ESM"), e); } }