Skip to content

Commit db4986d

Browse files
authored
Merge pull request #181 from halfzebra/better-errors
Better error output
2 parents 20b25f8 + be6d5c9 commit db4986d

File tree

9 files changed

+94
-54
lines changed

9 files changed

+94
-54
lines changed

config/webpack.config.dev.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ module.exports = {
3434
// the line below with these two lines if you prefer the stock client:
3535
// require.resolve('webpack-dev-server/client') + '?/',
3636
// require.resolve('webpack/hot/dev-server'),
37-
require.resolve('react-dev-utils/webpackHotDevClient'),
37+
// require.resolve('react-dev-utils/webpackHotDevClient'),
38+
require.resolve('../scripts/utils/webpackHotDevClient'),
3839

3940
// Errors should be considered fatal in development
4041
require.resolve('react-error-overlay'),
@@ -196,5 +197,15 @@ module.exports = {
196197
new HotModuleReplacementPlugin(),
197198

198199
new NamedModulesPlugin()
199-
]
200+
],
201+
202+
// Some libraries import Node modules but don't use them in the browser.
203+
// Tell Webpack to provide empty mocks for them so importing them works.
204+
node: {
205+
dgram: 'empty',
206+
fs: 'empty',
207+
net: 'empty',
208+
tls: 'empty',
209+
child_process: 'empty'
210+
}
200211
};

config/webpack.config.prod.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,5 +242,14 @@ module.exports = {
242242
// Don't precache sourcemaps (they're large) and build asset manifest:
243243
staticFileGlobsIgnorePatterns: [/\.map$/, /asset-manifest\.json$/]
244244
})
245-
]
245+
],
246+
// Some libraries import Node modules but don't use them in the browser.
247+
// Tell Webpack to provide empty mocks for them so importing them works.
248+
node: {
249+
dgram: 'empty',
250+
fs: 'empty',
251+
net: 'empty',
252+
tls: 'empty',
253+
child_process: 'empty'
254+
}
246255
};

scripts/build.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const paths = require('../config/paths');
2222
const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
2323
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
2424
const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
25-
const highlightElmCompilerErrors = require('./utils/highlightElmCompilerErrors');
25+
const formatElmCompilerErrors = require('./utils/formatElmCompilerErrors');
2626

2727
const measureFileSizesBeforeBuild =
2828
FileSizeReporter.measureFileSizesBeforeBuild;
@@ -90,7 +90,7 @@ function build(previousFileSizes) {
9090
if (err) {
9191
return reject(err);
9292
}
93-
const messages = highlightElmCompilerErrors(
93+
const messages = formatElmCompilerErrors(
9494
formatWebpackMessages(stats.toJson({}, true))
9595
);
9696
if (messages.errors.length) {

scripts/eject.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ function performEject(pkg) {
7272
fs.copySync(path.resolve(__dirname, 'build.js'), './scripts/build.js');
7373
fs.copySync(path.resolve(__dirname, 'start.js'), './scripts/start.js');
7474
fs.copySync(
75-
path.resolve(__dirname, './utils/highlightElmCompilerErrors.js'),
76-
'./scripts/utils/highlightElmCompilerErrors.js'
75+
path.resolve(__dirname, './utils/formatElmCompilerErrors.js'),
76+
'./scripts/utils/formatElmCompilerErrors.js'
7777
);
7878
fs.copySync(path.resolve(__dirname, '../config'), './config');
7979
} catch (err) {

scripts/start.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
2929
const clearConsole = require('react-dev-utils/clearConsole');
3030
const openBrowser = require('react-dev-utils/openBrowser');
3131
const createDevServerConfig = require('../config/webpackDevServer.config');
32-
const highlightElmCompilerErrors = require('./utils/highlightElmCompilerErrors');
32+
const formatElmCompilerErrors = require('./utils/formatElmCompilerErrors');
3333
const paths = require('../config/paths');
3434

3535
if (fs.existsSync('elm-package.json') === false) {
@@ -100,7 +100,7 @@ function createCompiler(webpack, config, appName, urls) {
100100
// We have switched off the default Webpack output in WebpackDevServer
101101
// options so we are going to "massage" the warnings and errors and present
102102
// them in a readable focused way.
103-
const messages = highlightElmCompilerErrors(
103+
const messages = formatElmCompilerErrors(
104104
formatWebpackMessages(stats.toJson({}, true))
105105
);
106106

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
'use strict';
2+
3+
var chalk = require('chalk');
4+
var ctx = new chalk.constructor({ enabled: true });
5+
var error = ctx.bold.red;
6+
var filename = ctx.cyan;
7+
var isBrowser = typeof window === 'object';
8+
9+
if (isBrowser) {
10+
ctx.level = 1;
11+
error = ctx.cyan;
12+
filename = ctx.green;
13+
}
14+
15+
function stripRedundantInfo(error) {
16+
return error.replace(
17+
/Module build failed: Error: Compiler process exited with error Compilation failed/g,
18+
''
19+
);
20+
}
21+
22+
module.exports = function formatElmCompilerErrors(messages) {
23+
var errors = messages.errors;
24+
var warnings = messages.warnings;
25+
return errors.length > 0
26+
? {
27+
errors: errors
28+
.map(x =>
29+
x
30+
.replace(/(--\s[A-Z\s]+-+\s.*\.elm\n)/g, filename('$1'))
31+
.replace(/(\n\s*)(\^+)/g, '$1' + error('$2'))
32+
.replace(/(\d+)(\|>)/g, '$1' + error('$2'))
33+
)
34+
.map(stripRedundantInfo),
35+
warnings: warnings
36+
}
37+
: messages;
38+
};

scripts/utils/highlightElmCompilerErrors.js

Lines changed: 0 additions & 19 deletions
This file was deleted.

scripts/utils/webpackHotDevClient.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var url = require('url');
1515
var launchEditorEndpoint = require('react-dev-utils/launchEditorEndpoint');
1616
var formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
1717
var ErrorOverlay = require('react-error-overlay');
18-
var highlightElmCompilerErrors = require('./highlightElmCompilerErrors');
18+
var formatElmCompilerErrors = require('./formatElmCompilerErrors');
1919

2020
ErrorOverlay.startReportingRuntimeErrors({
2121
launchEditorEndpoint: launchEditorEndpoint,
@@ -142,7 +142,7 @@ function handleErrors(errors) {
142142
hasCompileErrors = true;
143143

144144
// "Massage" webpack messages.
145-
var formatted = highlightElmCompilerErrors(
145+
var formatted = formatElmCompilerErrors(
146146
formatWebpackMessages({
147147
errors: errors,
148148
warnings: []

yarn.lock

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2327,6 +2327,7 @@ elm-test@^0.18.8:
23272327
find-parent-dir "^0.3.0"
23282328
firstline "1.2.1"
23292329
fs-extra "0.30.0"
2330+
fsevents "1.1.2"
23302331
glob "^7.1.1"
23312332
lodash "4.13.1"
23322333
minimist "^1.2.0"
@@ -2493,11 +2494,11 @@ escope@^3.6.0:
24932494
estraverse "^4.1.1"
24942495

24952496
eslint-plugin-prettier@^2.2.0:
2496-
version "2.2.0"
2497-
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.2.0.tgz#f2837ad063903d73c621e7188fb3d41486434088"
2497+
version "2.3.1"
2498+
resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.3.1.tgz#e7a746c67e716f335274b88295a9ead9f544e44d"
24982499
dependencies:
24992500
fast-diff "^1.1.1"
2500-
jest-docblock "^20.0.1"
2501+
jest-docblock "^21.0.0"
25012502

25022503
eslint-scope@^3.7.1:
25032504
version "3.7.1"
@@ -2507,18 +2508,18 @@ eslint-scope@^3.7.1:
25072508
estraverse "^4.1.1"
25082509

25092510
eslint@^4.6.1:
2510-
version "4.6.1"
2511-
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.6.1.tgz#ddc7fc7fd70bf93205b0b3449bb16a1e9e7d4950"
2511+
version "4.7.2"
2512+
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.7.2.tgz#ff6f5f5193848a27ee9b627be3e73fb9cb5e662e"
25122513
dependencies:
25132514
ajv "^5.2.0"
25142515
babel-code-frame "^6.22.0"
25152516
chalk "^2.1.0"
25162517
concat-stream "^1.6.0"
25172518
cross-spawn "^5.1.0"
2518-
debug "^2.6.8"
2519+
debug "^3.0.1"
25192520
doctrine "^2.0.0"
25202521
eslint-scope "^3.7.1"
2521-
espree "^3.5.0"
2522+
espree "^3.5.1"
25222523
esquery "^1.0.0"
25232524
estraverse "^4.2.0"
25242525
esutils "^2.0.2"
@@ -2539,7 +2540,7 @@ eslint@^4.6.1:
25392540
natural-compare "^1.4.0"
25402541
optionator "^0.8.2"
25412542
path-is-inside "^1.0.2"
2542-
pluralize "^4.0.0"
2543+
pluralize "^7.0.0"
25432544
progress "^2.0.0"
25442545
require-uncached "^1.0.3"
25452546
semver "^5.3.0"
@@ -2548,9 +2549,9 @@ eslint@^4.6.1:
25482549
table "^4.0.1"
25492550
text-table "~0.2.0"
25502551

2551-
espree@^3.5.0:
2552-
version "3.5.0"
2553-
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d"
2552+
espree@^3.5.1:
2553+
version "3.5.1"
2554+
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e"
25542555
dependencies:
25552556
acorn "^5.1.1"
25562557
acorn-jsx "^3.0.0"
@@ -3948,9 +3949,9 @@ [email protected], isstream@~0.1.2:
39483949
version "0.1.2"
39493950
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
39503951

3951-
jest-docblock@^20.0.1:
3952-
version "20.0.3"
3953-
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712"
3952+
jest-docblock@^21.0.0:
3953+
version "21.1.0"
3954+
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.1.0.tgz#43154be2441fb91403e36bb35cb791a5017cea81"
39543955

39553956
js-base64@^2.1.9:
39563957
version "2.1.9"
@@ -5210,9 +5211,9 @@ [email protected]:
52105211
version "0.4.0"
52115212
resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.0.tgz#349dbb7ffd38081fcadc0853df687f0c7744cd65"
52125213

5213-
pluralize@^4.0.0:
5214-
version "4.0.0"
5215-
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762"
5214+
pluralize@^7.0.0:
5215+
version "7.0.0"
5216+
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
52165217

52175218
portfinder@^1.0.9:
52185219
version "1.0.13"
@@ -7180,8 +7181,8 @@ webpack-dev-middleware@^1.11.0:
71807181
range-parser "^1.0.3"
71817182

71827183
webpack-dev-server@^2.8.1:
7183-
version "2.8.1"
7184-
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.8.1.tgz#344e312bf560498ee0c518f2fcc709951630f667"
7184+
version "2.8.2"
7185+
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.8.2.tgz#abd61f410778cc4c843d7cebbf41465b1ab7734c"
71857186
dependencies:
71867187
ansi-html "0.0.7"
71877188
array-includes "^3.0.3"
@@ -7203,10 +7204,10 @@ webpack-dev-server@^2.8.1:
72037204
sockjs "0.3.18"
72047205
sockjs-client "1.1.4"
72057206
spdy "^3.4.1"
7206-
strip-ansi "^4.0.0"
7207+
strip-ansi "^3.0.1"
72077208
supports-color "^4.2.1"
72087209
webpack-dev-middleware "^1.11.0"
7209-
yargs "^8.0.2"
7210+
yargs "^6.6.0"
72107211

72117212
webpack-sources@^1.0.1:
72127213
version "1.0.1"
@@ -7216,8 +7217,8 @@ webpack-sources@^1.0.1:
72167217
source-map "~0.5.3"
72177218

72187219
webpack@^3.5.6:
7219-
version "3.5.6"
7220-
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.6.tgz#a492fb6c1ed7f573816f90e00c8fbb5a20cc5c36"
7220+
version "3.6.0"
7221+
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.6.0.tgz#a89a929fbee205d35a4fa2cc487be9cbec8898bc"
72217222
dependencies:
72227223
acorn "^5.0.0"
72237224
acorn-dynamic-import "^2.0.0"
@@ -7383,7 +7384,7 @@ yargs-parser@^7.0.0:
73837384
dependencies:
73847385
camelcase "^4.1.0"
73857386

7386-
yargs@^6.5.0:
7387+
yargs@^6.5.0, yargs@^6.6.0:
73877388
version "6.6.0"
73887389
resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
73897390
dependencies:

0 commit comments

Comments
 (0)