1 |
|
2 |
|
3 | const chalk = require('chalk')
|
4 |
|
5 | const rules = [
|
6 | {
|
7 | type: 'cant-resolve-loader',
|
8 | re: /Can't resolve '(.*loader)'/,
|
9 | msg: (e, match) => (
|
10 | `Failed to resolve loader: ${chalk.yellow(match[1])}\n` +
|
11 | `You may need to install it.`
|
12 | )
|
13 | }
|
14 | ]
|
15 |
|
16 | exports.transformer = error => {
|
17 | if (error.webpackError) {
|
18 | const message = typeof error.webpackError === 'string'
|
19 | ? error.webpackError
|
20 | : error.webpackError.message || ''
|
21 | for (const { re, msg, type } of rules) {
|
22 | const match = message.match(re)
|
23 | if (match) {
|
24 | return Object.assign({}, error, {
|
25 |
|
26 |
|
27 | type,
|
28 | shortMessage: msg(error, match)
|
29 | })
|
30 | }
|
31 | }
|
32 |
|
33 |
|
34 | if (!error.message) {
|
35 | return Object.assign({}, error, {
|
36 | type: 'unknown-webpack-error',
|
37 | shortMessage: message
|
38 | })
|
39 | }
|
40 | }
|
41 | return error
|
42 | }
|
43 |
|
44 | exports.formatter = errors => {
|
45 | errors = errors.filter(e => e.shortMessage)
|
46 | if (errors.length) {
|
47 | return errors.map(e => e.shortMessage)
|
48 | }
|
49 | }
|