Skip to content

Commit 657b4e1

Browse files
authored
Merge pull request #29 from manuelbieh/webpack-build-improvements
Webpack build improvements
2 parents 50ebe77 + 1ef1788 commit 657b4e1

File tree

7 files changed

+91
-24
lines changed

7 files changed

+91
-24
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ coverage
1212
stuff
1313
build/*
1414
yarn-error.log
15-
tmp
15+
tmp
16+
bundle-stats.json

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
"yarn": "^1.3.0"
99
},
1010
"scripts": {
11+
"analyze": "yarn build:with-stats && yarn start:analyzer",
1112
"build": "cross-env NODE_ENV=production node scripts/build.js",
12-
"build-static": "cross-env NODE_ENV=production node scripts/build-static.js",
13+
"build:with-stats": "cross-env NODE_ENV=production webpack --config config/webpack.config.js/client.prod.js --json > build/client/static/bundle-stats.json",
1314
"lint": "eslint ./src",
1415
"plop": "plop",
1516
"start": "cross-env NODE_ENV=development node scripts/start.js",
17+
"start:analyzer": "webpack-bundle-analyzer build/client/static/bundle-stats.json",
1618
"test": "node scripts/test.js --env=jsdom",
1719
"test:update": "yarn test --updateSnapshot"
1820
},
@@ -115,6 +117,7 @@
115117
"stats-webpack-plugin": "^0.7.0",
116118
"url-loader": "^1.1.2",
117119
"webpack": "^4.23.1",
120+
"webpack-bundle-analyzer": "^3.0.3",
118121
"webpack-cli": "^3.1.2",
119122
"webpack-dev-server": "^3.1.10",
120123
"webpack-hot-middleware": "^2.24.3",

scripts/build.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@ const generateStaticHTML = async () => {
2828
const pageContent = await page.content();
2929
fs.writeFileSync(`${paths.clientBuild}/index.html`, pageContent);
3030
await browser.close();
31-
process.exit();
31+
script.emit('quit');
3232
} catch (err) {
33+
script.emit('quit');
3334
console.log(err);
34-
process.exit(1);
3535
}
3636
});
3737

38-
script.on('quit', () => {
39-
process.exit();
38+
script.on('exit', (code) => {
39+
process.exit(code);
4040
});
4141

42-
script.on('error', () => {
42+
script.on('crash', () => {
4343
process.exit(1);
4444
});
4545
};
@@ -51,11 +51,11 @@ const build = async () => {
5151
const [clientConfig, serverConfig] = webpackConfig;
5252
const multiCompiler = webpack([clientConfig, serverConfig]);
5353

54-
const clientCompiler = multiCompiler.compilers[0];
55-
const serverCompiler = multiCompiler.compilers[1];
54+
const clientCompiler = multiCompiler.compilers.find((compiler) => compiler.name === 'client');
55+
const serverCompiler = multiCompiler.compilers.find((compiler) => compiler.name === 'server');
5656

57-
const clientPromise = compilerPromise(clientCompiler);
58-
const serverPromise = compilerPromise(serverCompiler);
57+
const clientPromise = compilerPromise('client', clientCompiler);
58+
const serverPromise = compilerPromise('server', serverCompiler);
5959

6060
serverCompiler.watch({}, (error, stats) => {
6161
if (!error && !stats.hasErrors()) {

scripts/start.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ const start = async () => {
3939

4040
const multiCompiler = webpack([clientConfig, serverConfig]);
4141

42-
const clientCompiler = multiCompiler.compilers[0];
43-
const serverCompiler = multiCompiler.compilers[1];
42+
const clientCompiler = multiCompiler.compilers.find((compiler) => compiler.name === 'client');
43+
const serverCompiler = multiCompiler.compilers.find((compiler) => compiler.name === 'server');
4444

45-
const clientPromise = compilerPromise(clientCompiler);
46-
const serverPromise = compilerPromise(serverCompiler);
45+
const clientPromise = compilerPromise('client', clientCompiler);
46+
const serverPromise = compilerPromise('server', serverCompiler);
4747

4848
const watchOptions = {
4949
// poll: true,

scripts/utils.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@ const logMessage = (message, level = 'info') => {
55
console.log(`[${new Date().toISOString()}]`, chalk[color](message));
66
};
77

8-
const compilerPromise = (compiler) => {
8+
const compilerPromise = (name, compiler) => {
99
return new Promise((resolve, reject) => {
10-
compiler.plugin('done', (stats) => {
10+
compiler.hooks.compile.tap(name, () => {
11+
logMessage(`[${name}] Compiling `);
12+
});
13+
compiler.hooks.done.tap(name, (stats) => {
1114
if (!stats.hasErrors()) {
1215
return resolve();
1316
}
14-
return reject('Compilation failed');
17+
return reject(`Failed to compile ${name}`);
1518
});
1619
});
1720
};

src/server/index.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ app.use((req, res, next) => {
3232
});
3333

3434
const manifestPath = path.join(paths.clientBuild, paths.publicPath);
35-
console.log(manifestPath);
3635

3736
app.use(
3837
manifestHelpers({
@@ -74,5 +73,3 @@ app.listen(process.env.PORT || 8500, () => {
7473
});
7574

7675
export default app;
77-
78-
export const test = 'FOO';

yarn.lock

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -980,6 +980,11 @@ acorn@^5.0.0, acorn@^5.0.3, acorn@^5.5.3, acorn@^5.6.0, acorn@^5.6.2:
980980
version "5.7.2"
981981
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.2.tgz#91fa871883485d06708800318404e72bfb26dcc5"
982982

983+
acorn@^5.7.3:
984+
version "5.7.3"
985+
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
986+
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
987+
983988
acorn@^6.0.1, acorn@^6.0.2:
984989
version "6.0.2"
985990
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4"
@@ -1492,6 +1497,16 @@ bcrypt-pbkdf@^1.0.0:
14921497
dependencies:
14931498
tweetnacl "^0.14.3"
14941499

1500+
bfj@^6.1.1:
1501+
version "6.1.1"
1502+
resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48"
1503+
integrity sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==
1504+
dependencies:
1505+
bluebird "^3.5.1"
1506+
check-types "^7.3.0"
1507+
hoopy "^0.1.2"
1508+
tryer "^1.0.0"
1509+
14951510
big.js@^3.1.3:
14961511
version "3.2.0"
14971512
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
@@ -1917,6 +1932,11 @@ chardet@^0.7.0:
19171932
version "0.7.0"
19181933
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
19191934

1935+
check-types@^7.3.0:
1936+
version "7.4.0"
1937+
resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4"
1938+
integrity sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==
1939+
19201940
cheerio@^1.0.0-rc.2:
19211941
version "1.0.0-rc.2"
19221942
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
@@ -2087,6 +2107,11 @@ commander@^2.14.1, commander@^2.9.0, commander@~2.17.1:
20872107
version "2.17.1"
20882108
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
20892109

2110+
commander@^2.18.0:
2111+
version "2.19.0"
2112+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
2113+
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
2114+
20902115
commander@~2.13.0:
20912116
version "2.13.0"
20922117
resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
@@ -2787,6 +2812,11 @@ ee-first@1.1.1:
27872812
version "1.1.1"
27882813
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
27892814

2815+
ejs@^2.6.1:
2816+
version "2.6.1"
2817+
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0"
2818+
integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==
2819+
27902820
electron-to-chromium@^1.3.62:
27912821
version "1.3.63"
27922822
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.63.tgz#6485f5f4f3375358aa8fa23c2029ada208483b8d"
@@ -3331,7 +3361,7 @@ express@^4.16.2:
33313361
utils-merge "1.0.1"
33323362
vary "~1.1.2"
33333363

3334-
express@^4.16.4:
3364+
express@^4.16.3, express@^4.16.4:
33353365
version "4.16.4"
33363366
resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
33373367
integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
@@ -3955,7 +3985,7 @@ gud@^1.0.0:
39553985
resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
39563986
integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
39573987

3958-
gzip-size@5.0.0:
3988+
gzip-size@5.0.0, gzip-size@^5.0.0:
39593989
version "5.0.0"
39603990
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80"
39613991
integrity sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==
@@ -4153,6 +4183,11 @@ homedir-polyfill@^1.0.1:
41534183
dependencies:
41544184
parse-passwd "^1.0.0"
41554185

4186+
hoopy@^0.1.2:
4187+
version "0.1.4"
4188+
resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
4189+
integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
4190+
41564191
hosted-git-info@^2.1.4:
41574192
version "2.7.1"
41584193
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
@@ -6430,6 +6465,11 @@ onetime@^2.0.0:
64306465
dependencies:
64316466
mimic-fn "^1.0.0"
64326467

6468+
opener@^1.5.1:
6469+
version "1.5.1"
6470+
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
6471+
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
6472+
64336473
opn-cli@^3.1.0:
64346474
version "3.1.0"
64356475
resolved "https://registry.yarnpkg.com/opn-cli/-/opn-cli-3.1.0.tgz#f819ae6cae0b411bd0149b8560fe6c88adad20f8"
@@ -8678,6 +8718,11 @@ trim-right@^1.0.1:
86788718
version "1.0.1"
86798719
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
86808720

8721+
tryer@^1.0.0:
8722+
version "1.0.1"
8723+
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
8724+
integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==
8725+
86818726
tslib@^1.9.0:
86828727
version "1.9.3"
86838728
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
@@ -9038,6 +9083,24 @@ webidl-conversions@^4.0.2:
90389083
version "4.0.2"
90399084
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
90409085

9086+
webpack-bundle-analyzer@^3.0.3:
9087+
version "3.0.3"
9088+
resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.3.tgz#dbc7fff8f52058b6714a20fddf309d0790e3e0a0"
9089+
integrity sha512-naLWiRfmtH4UJgtUktRTLw6FdoZJ2RvCR9ePbwM9aRMsS/KjFerkPZG9epEvXRAw5d5oPdrs9+3p+afNjxW8Xw==
9090+
dependencies:
9091+
acorn "^5.7.3"
9092+
bfj "^6.1.1"
9093+
chalk "^2.4.1"
9094+
commander "^2.18.0"
9095+
ejs "^2.6.1"
9096+
express "^4.16.3"
9097+
filesize "^3.6.1"
9098+
gzip-size "^5.0.0"
9099+
lodash "^4.17.10"
9100+
mkdirp "^0.5.1"
9101+
opener "^1.5.1"
9102+
ws "^6.0.0"
9103+
90419104
webpack-cli@^3.1.2:
90429105
version "3.1.2"
90439106
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.1.2.tgz#17d7e01b77f89f884a2bbf9db545f0f6a648e746"
@@ -9307,7 +9370,7 @@ ws@^5.1.1, ws@^5.2.0:
93079370
dependencies:
93089371
async-limiter "~1.0.0"
93099372

9310-
ws@^6.1.0:
9373+
ws@^6.0.0, ws@^6.1.0:
93119374
version "6.1.0"
93129375
resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.0.tgz#119a9dbf92c54e190ec18d10e871d55c95cf9373"
93139376
integrity sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg==

0 commit comments

Comments
 (0)