163 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Friendly-errors-webpack-plugin
 | |
| 
 | |
| [](https://www.npmjs.com/package/@soda/friendly-errors-webpack-plugin)
 | |
| [](https://travis-ci.org/sodatea/friendly-errors-webpack-plugin)
 | |
| [](https://ci.appveyor.com/project/sodatea/friendly-errors-webpack-plugin/branch/master)
 | |
| 
 | |
| Friendly-errors-webpack-plugin recognizes certain classes of webpack
 | |
| errors and cleans, aggregates and prioritizes them to provide a better
 | |
| Developer Experience.
 | |
| 
 | |
| It is easy to add types of errors so if you would like to see more
 | |
| errors get handled, please open a [PR](https://help.github.com/articles/creating-a-pull-request/)!
 | |
| 
 | |
| ## Getting started
 | |
| 
 | |
| ### Installation
 | |
| 
 | |
| ```bash
 | |
| npm install @soda/friendly-errors-webpack-plugin --save-dev
 | |
| ```
 | |
| 
 | |
| ### Basic usage
 | |
| 
 | |
| Simply add `FriendlyErrorsWebpackPlugin` to the plugin section in your Webpack config.
 | |
| 
 | |
| ```javascript
 | |
| var FriendlyErrorsWebpackPlugin = require('@soda/friendly-errors-webpack-plugin');
 | |
| 
 | |
| var webpackConfig = {
 | |
|   // ...
 | |
|   plugins: [
 | |
|     new FriendlyErrorsWebpackPlugin(),
 | |
|   ],
 | |
|   // ...
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Turn off errors
 | |
| 
 | |
| You need to turn off all error logging by setting your webpack config quiet option to true.
 | |
| 
 | |
| ```javascript
 | |
| app.use(require('webpack-dev-middleware')(compiler, {
 | |
|   // ...
 | |
|   logLevel: 'silent',
 | |
|   // ...
 | |
| }));
 | |
| ```
 | |
| 
 | |
| If you use the webpack-dev-server, there is a setting in webpack's ```devServer``` options:
 | |
| 
 | |
| ```javascript
 | |
| // webpack config root
 | |
| {
 | |
|   // ...
 | |
|   devServer: {
 | |
|     // ...
 | |
|     quiet: true,
 | |
|     // ...
 | |
|   },
 | |
|   // ...
 | |
| }
 | |
| ```
 | |
| 
 | |
| If you use webpack-hot-middleware, that is done by setting the log option to `false`. You can do something sort of like this, depending upon your setup:
 | |
| 
 | |
| ```javascript
 | |
| app.use(require('webpack-hot-middleware')(compiler, {
 | |
|   log: false
 | |
| }));
 | |
| ```
 | |
| 
 | |
| _Thanks to [webpack-dashboard](https://github.com/FormidableLabs/webpack-dashboard) for this piece of info._
 | |
| 
 | |
| ## Demo
 | |
| 
 | |
| ### Build success
 | |
| 
 | |
| 
 | |
| 
 | |
| ### eslint-loader errors
 | |
| 
 | |
| 
 | |
| 
 | |
| ### babel-loader syntax errors
 | |
| 
 | |
| 
 | |
| 
 | |
| ### Module not found
 | |
| 
 | |
| 
 | |
| 
 | |
| ## Options
 | |
| 
 | |
| You can pass options to the plugin:
 | |
| 
 | |
| ```js
 | |
| new FriendlyErrorsPlugin({
 | |
|   compilationSuccessInfo: {
 | |
|     messages: ['You application is running here http://localhost:3000'],
 | |
|     notes: ['Some additional notes to be displayed upon successful compilation']
 | |
|   },
 | |
|   onErrors: function (severity, errors) {
 | |
|     // You can listen to errors transformed and prioritized by the plugin
 | |
|     // severity can be 'error' or 'warning'
 | |
|   },
 | |
|   // should the console be cleared between each compilation?
 | |
|   // default is true
 | |
|   clearConsole: true,
 | |
| 
 | |
|   // add formatters and transformers (see below)
 | |
|   additionalFormatters: [],
 | |
|   additionalTransformers: []
 | |
| })
 | |
| ```
 | |
| 
 | |
| ## Adding desktop notifications
 | |
| 
 | |
| The plugin has no native support for desktop notifications but it is easy
 | |
| to add them thanks to [node-notifier](https://www.npmjs.com/package/node-notifier) for instance.
 | |
| 
 | |
| ```js
 | |
| var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');
 | |
| var notifier = require('node-notifier');
 | |
| var ICON = path.join(__dirname, 'icon.png');
 | |
| 
 | |
| new FriendlyErrorsPlugin({
 | |
|     onErrors: (severity, errors) => {
 | |
|       if (severity !== 'error') {
 | |
|         return;
 | |
|       }
 | |
|       const error = errors[0];
 | |
|       notifier.notify({
 | |
|         title: "Webpack error",
 | |
|         message: severity + ': ' + error.name,
 | |
|         subtitle: error.file || '',
 | |
|         icon: ICON
 | |
|       });
 | |
|     }
 | |
|   })
 | |
| ```
 | |
| 
 | |
| ## API
 | |
| 
 | |
| ### Transformers and formatters
 | |
| 
 | |
| Webpack's errors processing, is done in four phases:
 | |
| 
 | |
| 1. Extract relevant info from webpack errors. This is done by the plugin [here](https://github.com/sodatea/friendly-errors-webpack-plugin/blob/master/src/core/extractWebpackError.js)
 | |
| 2. Apply transformers to all errors to identify and annotate well know errors and give them a priority
 | |
| 3. Get only top priority error or top priority warnings if no errors are thrown
 | |
| 4. Apply formatters to all annotated errors
 | |
| 
 | |
| You can add transformers and formatters. Please see [transformErrors](https://github.com/sodatea/friendly-errors-webpack-plugin/blob/master/src/core/transformErrors.js),
 | |
| and [formatErrors](https://github.com/sodatea/friendly-errors-webpack-plugin/blob/master/src/core/formatErrors.js)
 | |
| in the source code and take a look a the [default transformers](https://github.com/sodatea/friendly-errors-webpack-plugin/tree/master/src/transformers)
 | |
| and the [default formatters](https://github.com/sodatea/friendly-errors-webpack-plugin/tree/master/src/formatters).
 | |
| 
 | |
| ## TODO
 | |
| 
 | |
| - [x] Make it compatible with node 4
 | |
| 
 |