diff --git a/lib/NormalModuleFactory.js b/lib/NormalModuleFactory.js index 4cb2cb65d5d..d2f222275d8 100644 --- a/lib/NormalModuleFactory.js +++ b/lib/NormalModuleFactory.js @@ -72,6 +72,7 @@ const EMPTY_GENERATOR_OPTIONS = {}; const EMPTY_ELEMENTS = []; const MATCH_RESOURCE_REGEX = /^([^!]+)!=!/; +const LEADING_DOT_EXTENSION_REGEX = /^[^.]/; const loaderToIdent = data => { if (!data.options) { @@ -849,6 +850,25 @@ ${err2.stack}`; err.message += ` ${hints.join("\n\n")}`; } + + // Check if the extension is missing a leading dot (e.g. "js" instead of ".js") + let appendResolveExtensionsHint = false; + const specifiedExtensions = Array.from( + resolver.options.extensions + ); + const expectedExtensions = specifiedExtensions.map(extension => { + if (LEADING_DOT_EXTENSION_REGEX.test(extension)) { + appendResolveExtensionsHint = true; + return `.${extension}`; + } + return extension; + }); + if (appendResolveExtensionsHint) { + err.message += `\nDid you miss the leading dot in 'resolve.extensions'? Did you mean '${JSON.stringify( + expectedExtensions + )}' instead of '${JSON.stringify(specifiedExtensions)}'?`; + } + callback(err); } );