diff --git a/lib/Compilation.js b/lib/Compilation.js index d5b18bbbf..87aae7a8b 100644 --- a/lib/Compilation.js +++ b/lib/Compilation.js @@ -33,6 +33,7 @@ const ModuleDependencyWarning = require("./ModuleDependencyWarning"); const ModuleGraph = require("./ModuleGraph"); const ModuleNotFoundError = require("./ModuleNotFoundError"); const ModuleProfile = require("./ModuleProfile"); +const ModuleRestoreError = require("./ModuleRestoreError"); const ModuleTemplate = require("./ModuleTemplate"); const RuntimeTemplate = require("./RuntimeTemplate"); const Stats = require("./Stats"); @@ -507,7 +508,7 @@ class Compilation { const cacheName = `${this.compilerPath}/module/${identifier}`; this.cache.get(cacheName, null, (err, cacheModule) => { - if (err) return callback(err); + if (err) return callback(new ModuleRestoreError(module, err)); if (currentProfile !== undefined) { currentProfile.markRestoringEnd(); diff --git a/lib/ModuleRestoreError.js b/lib/ModuleRestoreError.js new file mode 100644 index 000000000..3dec09e29 --- /dev/null +++ b/lib/ModuleRestoreError.js @@ -0,0 +1,38 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ + +"use strict"; + +const WebpackError = require("./WebpackError"); + +class ModuleRestoreError extends WebpackError { + constructor(module, err) { + let message = "Module restore failed: "; + let details = undefined; + if (err !== null && typeof err === "object") { + if (typeof err.stack === "string" && err.stack) { + const stack = err.stack; + message += stack; + } else if (typeof err.message === "string" && err.message) { + message += err.message; + } else { + message += err; + } + } else { + message = err; + } + + super(message); + + this.name = "ModuleRestoreError"; + this.details = details; + this.module = module; + this.error = err; + + Error.captureStackTrace(this, this.constructor); + } +} + +module.exports = ModuleRestoreError;