48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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)
 | |
|   }
 | |
| }
 |