Skip to content

Commit dc61df6

Browse files
Timergaearon
authored andcommitted
Compile code in parallel (#3778)
* Cheap perf gains * Whoopsie
1 parent 074c694 commit dc61df6

File tree

3 files changed

+66
-33
lines changed

3 files changed

+66
-33
lines changed

packages/react-scripts/config/webpack.config.dev.js

+34-18
Original file line numberDiff line numberDiff line change
@@ -164,29 +164,45 @@ module.exports = {
164164
{
165165
test: /\.(js|jsx|mjs)$/,
166166
include: paths.appSrc,
167-
loader: require.resolve('babel-loader'),
168-
options: {
169-
// @remove-on-eject-begin
170-
babelrc: false,
171-
presets: [require.resolve('babel-preset-react-app')],
172-
// @remove-on-eject-end
173-
// This is a feature of `babel-loader` for webpack (not Babel itself).
174-
// It enables caching results in ./node_modules/.cache/babel-loader/
175-
// directory for faster rebuilds.
176-
cacheDirectory: true,
177-
},
167+
use: [
168+
// This loader parallelizes code compilation, it is optional but
169+
// improves compile time on larger projects
170+
require.resolve('thread-loader'),
171+
{
172+
loader: require.resolve('babel-loader'),
173+
options: {
174+
// @remove-on-eject-begin
175+
babelrc: false,
176+
presets: [require.resolve('babel-preset-react-app')],
177+
// @remove-on-eject-end
178+
// This is a feature of `babel-loader` for webpack (not Babel itself).
179+
// It enables caching results in ./node_modules/.cache/babel-loader/
180+
// directory for faster rebuilds.
181+
cacheDirectory: true,
182+
},
183+
},
184+
],
178185
},
179186
// Process any JS outside of the app with Babel.
180187
// Unlike the application JS, we only compile the standard ES features.
181188
{
182189
test: /\.js$/,
183-
loader: require.resolve('babel-loader'),
184-
options: {
185-
babelrc: false,
186-
compact: false,
187-
presets: [require.resolve('babel-preset-react-app/dependencies')],
188-
cacheDirectory: true,
189-
},
190+
use: [
191+
// This loader parallelizes code compilation, it is optional but
192+
// improves compile time on larger projects
193+
require.resolve('thread-loader'),
194+
{
195+
loader: require.resolve('babel-loader'),
196+
options: {
197+
babelrc: false,
198+
compact: false,
199+
presets: [
200+
require.resolve('babel-preset-react-app/dependencies'),
201+
],
202+
cacheDirectory: true,
203+
},
204+
},
205+
],
190206
},
191207
// "postcss" loader applies autoprefixer to our CSS.
192208
// "css" loader resolves paths in CSS and adds assets as dependencies.

packages/react-scripts/config/webpack.config.prod.js

+31-15
Original file line numberDiff line numberDiff line change
@@ -172,26 +172,42 @@ module.exports = {
172172
{
173173
test: /\.(js|jsx|mjs)$/,
174174
include: paths.appSrc,
175-
loader: require.resolve('babel-loader'),
176-
options: {
177-
// @remove-on-eject-begin
178-
babelrc: false,
179-
presets: [require.resolve('babel-preset-react-app')],
180-
// @remove-on-eject-end
181-
compact: true,
182-
},
175+
use: [
176+
// This loader parallelizes code compilation, it is optional but
177+
// improves compile time on larger projects
178+
require.resolve('thread-loader'),
179+
{
180+
loader: require.resolve('babel-loader'),
181+
options: {
182+
// @remove-on-eject-begin
183+
babelrc: false,
184+
presets: [require.resolve('babel-preset-react-app')],
185+
// @remove-on-eject-end
186+
compact: true,
187+
},
188+
},
189+
],
183190
},
184191
// Process any JS outside of the app with Babel.
185192
// Unlike the application JS, we only compile the standard ES features.
186193
{
187194
test: /\.js$/,
188-
loader: require.resolve('babel-loader'),
189-
options: {
190-
babelrc: false,
191-
compact: false,
192-
presets: [require.resolve('babel-preset-react-app/dependencies')],
193-
cacheDirectory: true,
194-
},
195+
use: [
196+
// This loader parallelizes code compilation, it is optional but
197+
// improves compile time on larger projects
198+
require.resolve('thread-loader'),
199+
{
200+
loader: require.resolve('babel-loader'),
201+
options: {
202+
babelrc: false,
203+
compact: false,
204+
presets: [
205+
require.resolve('babel-preset-react-app/dependencies'),
206+
],
207+
cacheDirectory: true,
208+
},
209+
},
210+
],
195211
},
196212
// The notation here is somewhat confusing.
197213
// "postcss" loader applies autoprefixer to our CSS.

packages/react-scripts/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"react-dev-utils": "^4.2.1",
5555
"style-loader": "0.19.0",
5656
"sw-precache-webpack-plugin": "0.11.4",
57+
"thread-loader": "1.1.2",
5758
"uglifyjs-webpack-plugin": "1.1.6",
5859
"url-loader": "0.6.2",
5960
"webpack": "3.8.1",

0 commit comments

Comments
 (0)