You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.5 KiB
86 lines
2.5 KiB
/* |
|
MIT License http://www.opensource.org/licenses/mit-license.php |
|
Author Tobias Koppers @sokra |
|
*/ |
|
|
|
"use strict"; |
|
|
|
const WebpackError = require("./WebpackError"); |
|
|
|
/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */ |
|
/** @typedef {import("./Module")} Module */ |
|
|
|
const previouslyPolyfilledBuiltinModules = { |
|
assert: "assert/", |
|
buffer: "buffer/", |
|
console: "console-browserify", |
|
constants: "constants-browserify", |
|
crypto: "crypto-browserify", |
|
domain: "domain-browser", |
|
events: "events/", |
|
http: "stream-http", |
|
https: "https-browserify", |
|
os: "os-browserify/browser", |
|
path: "path-browserify", |
|
punycode: "punycode/", |
|
process: "process/browser", |
|
querystring: "querystring-es3", |
|
stream: "stream-browserify", |
|
_stream_duplex: "readable-stream/duplex", |
|
_stream_passthrough: "readable-stream/passthrough", |
|
_stream_readable: "readable-stream/readable", |
|
_stream_transform: "readable-stream/transform", |
|
_stream_writable: "readable-stream/writable", |
|
string_decoder: "string_decoder/", |
|
sys: "util/", |
|
timers: "timers-browserify", |
|
tty: "tty-browserify", |
|
url: "url/", |
|
util: "util/", |
|
vm: "vm-browserify", |
|
zlib: "browserify-zlib" |
|
}; |
|
|
|
class ModuleNotFoundError extends WebpackError { |
|
/** |
|
* @param {Module} module module tied to dependency |
|
* @param {Error&any} err error thrown |
|
* @param {DependencyLocation} loc location of dependency |
|
*/ |
|
constructor(module, err, loc) { |
|
let message = `Module not found: ${err.toString()}`; |
|
|
|
// TODO remove in webpack 6 |
|
const match = err.message.match(/Can't resolve '([^']+)'/); |
|
if (match) { |
|
const request = match[1]; |
|
const alias = previouslyPolyfilledBuiltinModules[request]; |
|
if (alias) { |
|
const pathIndex = alias.indexOf("/"); |
|
const dependency = pathIndex > 0 ? alias.slice(0, pathIndex) : alias; |
|
message += |
|
"\n\n" + |
|
"BREAKING CHANGE: " + |
|
"webpack < 5 used to include polyfills for node.js core modules by default.\n" + |
|
"This is no longer the case. Verify if you need this module and configure a polyfill for it.\n\n"; |
|
message += |
|
"If you want to include a polyfill, you need to:\n" + |
|
`\t- add a fallback 'resolve.fallback: { "${request}": require.resolve("${alias}") }'\n` + |
|
`\t- install '${dependency}'\n`; |
|
message += |
|
"If you don't want to include a polyfill, you can use an empty module like this:\n" + |
|
`\tresolve.fallback: { "${request}": false }`; |
|
} |
|
} |
|
|
|
super(message); |
|
|
|
this.name = "ModuleNotFoundError"; |
|
this.details = err.details; |
|
this.module = module; |
|
this.error = err; |
|
this.loc = loc; |
|
} |
|
} |
|
|
|
module.exports = ModuleNotFoundError;
|
|
|