resolveLoaderError.js 1.2 KB

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