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.
47 lines
1.2 KiB
47 lines
1.2 KiB
const { chalk } = require('@vue/cli-shared-utils') |
|
|
|
const rules = [ |
|
{ |
|
type: 'cant-resolve-loader', |
|
re: /Can't resolve '(.*loader)'/, |
|
msg: (e, match) => ( |
|
`Failed to resolve loader: ${chalk.yellow(match[1])}\n` + |
|
`You may need to install it.` |
|
) |
|
} |
|
] |
|
|
|
exports.transformer = error => { |
|
if (error.webpackError) { |
|
const message = typeof error.webpackError === 'string' |
|
? error.webpackError |
|
: error.webpackError.message || '' |
|
for (const { re, msg, type } of rules) { |
|
const match = message.match(re) |
|
if (match) { |
|
return Object.assign({}, error, { |
|
// type is necessary to avoid being printed as default error |
|
// by friendly-error-webpack-plugin |
|
type, |
|
shortMessage: msg(error, match) |
|
}) |
|
} |
|
} |
|
// no match, unknown webpack error without a message. |
|
// friendly-error-webpack-plugin fails to handle this. |
|
if (!error.message) { |
|
return Object.assign({}, error, { |
|
type: 'unknown-webpack-error', |
|
shortMessage: message |
|
}) |
|
} |
|
} |
|
return error |
|
} |
|
|
|
exports.formatter = errors => { |
|
errors = errors.filter(e => e.shortMessage) |
|
if (errors.length) { |
|
return errors.map(e => e.shortMessage) |
|
} |
|
}
|
|
|