Commit b643f571 authored by Ade Viankakrisna Fadlil's avatar Ade Viankakrisna Fadlil Committed by Joe Haddad
Browse files

Format UglifyJs error (#2650)

* format UglifyJs error

* move formatBuildError to react-dev-utils

* fix readme

* use regex for plucking the path from stack

* make path human readable and fallback to show error if regex not matched

* rename to printBuildError and add link to the docs

* fix link indentation

* improve readibility + shorten link
parent 20c953d0
3 merge requests!12191Lim.Pisey.168:/Identified - We are currently investigating reports of missing build logs. The issue has been identified and a resolution is in progress. We will provide a further update when available.Mar 21, 09:02 UTC,!12853brikk,!5717Automatically extract project file structure from build bundle file
Showing with 79 additions and 2 deletions
+79 -2
...@@ -220,6 +220,20 @@ compiler.plugin('done', function(stats) { ...@@ -220,6 +220,20 @@ compiler.plugin('done', function(stats) {
}); });
``` ```
#### `printBuildError(error: Object): void`
Prettify some known build errors.
Pass an Error object to log a prettified error message in the console.
```
const printBuildError = require('react-dev-utils/printBuildError')
try {
build()
} catch(e) {
printBuildError(e) // logs prettified message
}
```
#### `getProcessForPort(port: number): string` #### `getProcessForPort(port: number): string`
Finds the currently running process on `port`. Finds the currently running process on `port`.
......
...@@ -18,13 +18,14 @@ ...@@ -18,13 +18,14 @@
"crossSpawn.js", "crossSpawn.js",
"eslintFormatter.js", "eslintFormatter.js",
"FileSizeReporter.js", "FileSizeReporter.js",
"printBuildError.js",
"formatWebpackMessages.js", "formatWebpackMessages.js",
"getProcessForPort.js", "getProcessForPort.js",
"inquirer.js", "inquirer.js",
"InterpolateHtmlPlugin.js", "InterpolateHtmlPlugin.js",
"launchEditor.js", "launchEditor.js",
"noopServiceWorkerMiddleware.js",
"ModuleScopePlugin.js", "ModuleScopePlugin.js",
"noopServiceWorkerMiddleware.js",
"openBrowser.js", "openBrowser.js",
"openChrome.applescript", "openChrome.applescript",
"printHostingInstructions.js", "printHostingInstructions.js",
......
/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
'use strict';
const get = require('lodash/get');
const chalk = require('chalk');
module.exports = function printBuildError(err) {
const message = get(err, 'message');
const stack = get(err, 'stack');
// Add more helpful message for UglifyJs error
if (
stack &&
typeof message === 'string' &&
message.indexOf('from UglifyJs') !== -1
) {
try {
const matched = /Unexpected token:(.+)\[(.+)\:(.+)\,(.+)\]\[.+\]/.exec(
stack
);
if (!matched) {
throw new Error(
"The regex pattern is not matched. Maybe UglifyJs changed it's message?"
);
}
const problemPath = matched[2];
const line = matched[3];
const column = matched[4];
console.log(
'Failed to minify the code from this file: \n\n',
chalk.yellow(`${problemPath} line ${line}:${column}`),
'\n'
);
} catch (ignored) {
console.log('Failed to minify the code.', err);
}
console.log('Read more here: http://bit.ly/2tRViJ9');
} else {
console.log((message || err) + '\n');
}
console.log();
};
...@@ -34,6 +34,7 @@ const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles'); ...@@ -34,6 +34,7 @@ const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages'); const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
const printHostingInstructions = require('react-dev-utils/printHostingInstructions'); const printHostingInstructions = require('react-dev-utils/printHostingInstructions');
const FileSizeReporter = require('react-dev-utils/FileSizeReporter'); const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
const printBuildError = require('react-dev-utils/printBuildError');
const measureFileSizesBeforeBuild = const measureFileSizesBeforeBuild =
FileSizeReporter.measureFileSizesBeforeBuild; FileSizeReporter.measureFileSizesBeforeBuild;
...@@ -104,7 +105,7 @@ measureFileSizesBeforeBuild(paths.appBuild) ...@@ -104,7 +105,7 @@ measureFileSizesBeforeBuild(paths.appBuild)
}, },
err => { err => {
console.log(chalk.red('Failed to compile.\n')); console.log(chalk.red('Failed to compile.\n'));
console.log((err.message || err) + '\n'); printBuildError(err);
process.exit(1); process.exit(1);
} }
); );
......
...@@ -92,6 +92,7 @@ You can find the most recent version of this guide [here](https://github.com/fac ...@@ -92,6 +92,7 @@ You can find the most recent version of this guide [here](https://github.com/fac
- [`npm test` hangs on macOS Sierra](#npm-test-hangs-on-macos-sierra) - [`npm test` hangs on macOS Sierra](#npm-test-hangs-on-macos-sierra)
- [`npm run build` exits too early](#npm-run-build-exits-too-early) - [`npm run build` exits too early](#npm-run-build-exits-too-early)
- [`npm run build` fails on Heroku](#npm-run-build-fails-on-heroku) - [`npm run build` fails on Heroku](#npm-run-build-fails-on-heroku)
- [`npm run build` fails to minify](#npm-run-build-fails-to-minify)
- [Moment.js locales are missing](#momentjs-locales-are-missing) - [Moment.js locales are missing](#momentjs-locales-are-missing)
- [Something Missing?](#something-missing) - [Something Missing?](#something-missing)
...@@ -2137,6 +2138,16 @@ moment.locale('fr'); ...@@ -2137,6 +2138,16 @@ moment.locale('fr');
This will only work for locales that have been explicitly imported before. This will only work for locales that have been explicitly imported before.
### `npm run build` fails to minify
You may occasionally find a package you depend on needs compiled or ships code for a non-browser environment.<br>
This is considered poor practice in the ecosystem and does not have an escape hatch in Create React App.<br>
<br>
To resolve this:
1. Open an issue on the dependency's issue tracker and ask that the package be published pre-compiled (retaining ES6 Modules).
2. Fork the package and publish a corrected version yourself.
3. If the dependency is small enough, copy it to your `src/` folder and treat it as application code.
## Something Missing? ## Something Missing?
If you have ideas for more “How To” recipes that should be on this page, [let us know](https://github.com/facebookincubator/create-react-app/issues) or [contribute some!](https://github.com/facebookincubator/create-react-app/edit/master/packages/react-scripts/template/README.md) If you have ideas for more “How To” recipes that should be on this page, [let us know](https://github.com/facebookincubator/create-react-app/issues) or [contribute some!](https://github.com/facebookincubator/create-react-app/edit/master/packages/react-scripts/template/README.md)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment