patch: Improve webpack build time

Signed-off-by: Lorenzo Alberto Maria Ambrosi <lorenzothunder.ambrosi@gmail.com>
This commit is contained in:
Lorenzo Alberto Maria Ambrosi 2021-11-11 10:45:00 +01:00
parent 1c2ef4b1d4
commit 3cf3c4b398
5 changed files with 223 additions and 25 deletions

View File

@ -28,7 +28,6 @@ import * as EXIT_CODES from '../../shared/exit-codes';
import * as messages from '../../shared/messages';
import * as availableDrives from './models/available-drives';
import * as flashState from './models/flash-state';
import { init as ledsInit } from './models/leds';
import { deselectImage, getImage } from './models/selection-state';
import * as settings from './models/settings';
import { Actions, observe, store } from './models/store';
@ -340,7 +339,13 @@ window.addEventListener('beforeunload', async (event) => {
});
export async function main() {
await ledsInit();
try {
const { init: ledsInit } = require('./models/leds');
await ledsInit();
} catch (error: any) {
exceptionReporter.report(error);
}
ReactDOM.render(
React.createElement(MainPage),
document.getElementById('main'),

186
package-lock.json generated
View File

@ -6997,6 +6997,173 @@
"es6-symbol": "^3.1.1"
}
},
"esbuild": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.13.tgz",
"integrity": "sha512-Z17A/R6D0b4s3MousytQ/5i7mTCbaF+Ua/yPfoe71vdTv4KBvVAvQ/6ytMngM2DwGJosl8WxaD75NOQl2QF26Q==",
"dev": true,
"requires": {
"esbuild-android-arm64": "0.13.13",
"esbuild-darwin-64": "0.13.13",
"esbuild-darwin-arm64": "0.13.13",
"esbuild-freebsd-64": "0.13.13",
"esbuild-freebsd-arm64": "0.13.13",
"esbuild-linux-32": "0.13.13",
"esbuild-linux-64": "0.13.13",
"esbuild-linux-arm": "0.13.13",
"esbuild-linux-arm64": "0.13.13",
"esbuild-linux-mips64le": "0.13.13",
"esbuild-linux-ppc64le": "0.13.13",
"esbuild-netbsd-64": "0.13.13",
"esbuild-openbsd-64": "0.13.13",
"esbuild-sunos-64": "0.13.13",
"esbuild-windows-32": "0.13.13",
"esbuild-windows-64": "0.13.13",
"esbuild-windows-arm64": "0.13.13"
}
},
"esbuild-android-arm64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.13.tgz",
"integrity": "sha512-T02aneWWguJrF082jZworjU6vm8f4UQ+IH2K3HREtlqoY9voiJUwHLRL6khRlsNLzVglqgqb7a3HfGx7hAADCQ==",
"dev": true,
"optional": true
},
"esbuild-darwin-64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.13.tgz",
"integrity": "sha512-wkaiGAsN/09X9kDlkxFfbbIgR78SNjMOfUhoel3CqKBDsi9uZhw7HBNHNxTzYUK8X8LAKFpbODgcRB3b/I8gHA==",
"dev": true,
"optional": true
},
"esbuild-darwin-arm64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.13.tgz",
"integrity": "sha512-b02/nNKGSV85Gw9pUCI5B48AYjk0vFggDeom0S6QMP/cEDtjSh1WVfoIFNAaLA0MHWfue8KBwoGVsN7rBshs4g==",
"dev": true,
"optional": true
},
"esbuild-freebsd-64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.13.tgz",
"integrity": "sha512-ALgXYNYDzk9YPVk80A+G4vz2D22Gv4j4y25exDBGgqTcwrVQP8rf/rjwUjHoh9apP76oLbUZTmUmvCMuTI1V9A==",
"dev": true,
"optional": true
},
"esbuild-freebsd-arm64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.13.tgz",
"integrity": "sha512-uFvkCpsZ1yqWQuonw5T1WZ4j59xP/PCvtu6I4pbLejhNo4nwjW6YalqnBvBSORq5/Ifo9S/wsIlVHzkzEwdtlw==",
"dev": true,
"optional": true
},
"esbuild-linux-32": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.13.tgz",
"integrity": "sha512-yxR9BBwEPs9acVEwTrEE2JJNHYVuPQC9YGjRfbNqtyfK/vVBQYuw8JaeRFAvFs3pVJdQD0C2BNP4q9d62SCP4w==",
"dev": true,
"optional": true
},
"esbuild-linux-64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.13.tgz",
"integrity": "sha512-kzhjlrlJ+6ESRB/n12WTGll94+y+HFeyoWsOrLo/Si0s0f+Vip4b8vlnG0GSiS6JTsWYAtGHReGczFOaETlKIw==",
"dev": true,
"optional": true
},
"esbuild-linux-arm": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.13.tgz",
"integrity": "sha512-hXub4pcEds+U1TfvLp1maJ+GHRw7oizvzbGRdUvVDwtITtjq8qpHV5Q5hWNNn6Q+b3b2UxF03JcgnpzCw96nUQ==",
"dev": true,
"optional": true
},
"esbuild-linux-arm64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.13.tgz",
"integrity": "sha512-KMrEfnVbmmJxT3vfTnPv/AiXpBFbbyExH13BsUGy1HZRPFMi5Gev5gk8kJIZCQSRfNR17aqq8sO5Crm2KpZkng==",
"dev": true,
"optional": true
},
"esbuild-linux-mips64le": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.13.tgz",
"integrity": "sha512-cJT9O1LYljqnnqlHaS0hdG73t7hHzF3zcN0BPsjvBq+5Ad47VJun+/IG4inPhk8ta0aEDK6LdP+F9299xa483w==",
"dev": true,
"optional": true
},
"esbuild-linux-ppc64le": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.13.tgz",
"integrity": "sha512-+rghW8st6/7O6QJqAjVK3eXzKkZqYAw6LgHv7yTMiJ6ASnNvghSeOcIvXFep3W2oaJc35SgSPf21Ugh0o777qQ==",
"dev": true,
"optional": true
},
"esbuild-loader": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.16.0.tgz",
"integrity": "sha512-LCJEwkf+nMJbNmVYNgg/0PaIZDdr5OcHw1qbWAZLkrmBRX+KwHY/yAS6ia98UBtwzk/WhsftUBNB6tfPHgFIxw==",
"dev": true,
"requires": {
"esbuild": "^0.13.4",
"joycon": "^3.0.1",
"json5": "^2.2.0",
"loader-utils": "^2.0.0",
"tapable": "^2.2.0",
"type-fest": "^1.4.0",
"webpack-sources": "^2.2.0"
},
"dependencies": {
"type-fest": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
"dev": true
}
}
},
"esbuild-netbsd-64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.13.tgz",
"integrity": "sha512-A/B7rwmzPdzF8c3mht5TukbnNwY5qMJqes09ou0RSzA5/jm7Jwl/8z853ofujTFOLhkNHUf002EAgokzSgEMpQ==",
"dev": true,
"optional": true
},
"esbuild-openbsd-64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.13.tgz",
"integrity": "sha512-szwtuRA4rXKT3BbwoGpsff6G7nGxdKgUbW9LQo6nm0TVCCjDNDC/LXxT994duIW8Tyq04xZzzZSW7x7ttDiw1w==",
"dev": true,
"optional": true
},
"esbuild-sunos-64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.13.tgz",
"integrity": "sha512-ihyds9O48tVOYF48iaHYUK/boU5zRaLOXFS+OOL3ceD39AyHo46HVmsJLc7A2ez0AxNZCxuhu+P9OxfPfycTYQ==",
"dev": true,
"optional": true
},
"esbuild-windows-32": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.13.tgz",
"integrity": "sha512-h2RTYwpG4ldGVJlbmORObmilzL8EECy8BFiF8trWE1ZPHLpECE9//J3Bi+W3eDUuv/TqUbiNpGrq4t/odbayUw==",
"dev": true,
"optional": true
},
"esbuild-windows-64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.13.tgz",
"integrity": "sha512-oMrgjP4CjONvDHe7IZXHrMk3wX5Lof/IwFEIbwbhgbXGBaN2dke9PkViTiXC3zGJSGpMvATXVplEhlInJ0drHA==",
"dev": true,
"optional": true
},
"esbuild-windows-arm64": {
"version": "0.13.13",
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.13.tgz",
"integrity": "sha512-6fsDfTuTvltYB5k+QPah/x7LrI2+OLAJLE3bWLDiZI6E8wXMQU+wLqtEO/U/RvJgVY1loPs5eMpUBpVajczh1A==",
"dev": true,
"optional": true
},
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@ -9370,6 +9537,12 @@
}
}
},
"joycon": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/joycon/-/joycon-3.0.1.tgz",
"integrity": "sha512-SJcJNBg32dGgxhPtM0wQqxqV0ax9k/9TaUskGDSJkSFSQOEWWvQ3zzWdGQRIUry2j1zA5+ReH13t0Mf3StuVZA==",
"dev": true
},
"js-message": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz",
@ -15011,13 +15184,12 @@
}
},
"terser-webpack-plugin": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz",
"integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==",
"version": "5.2.5",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz",
"integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==",
"dev": true,
"requires": {
"jest-worker": "^27.0.6",
"p-limit": "^3.1.0",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.0",
"source-map": "^0.6.1",
@ -15404,9 +15576,9 @@
}
},
"typescript": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.2.tgz",
"integrity": "sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ==",
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
"dev": true
},
"typical": {

View File

@ -79,7 +79,7 @@
"@types/mocha": "8.0.3",
"@types/node": "14.14.41",
"@types/node-ipc": "9.1.2",
"@types/react": "^16.8.5",
"@types/react": "16.8.5",
"@types/react-dom": "16.8.4",
"@types/semver": "7.1.0",
"@types/sinon": "9.0.0",
@ -94,6 +94,7 @@
"electron-mocha": "9.3.2",
"electron-notarize": "1.0.0",
"electron-updater": "4.3.5",
"esbuild-loader": "2.16.0",
"file-loader": "6.2.0",
"husky": "4.2.5",
"lint-staged": "10.2.2",
@ -106,10 +107,11 @@
"spectron": "14.0.0",
"string-replace-loader": "3.0.1",
"style-loader": "2.0.0",
"terser-webpack-plugin": "5.2.5",
"ts-loader": "8.0.12",
"ts-node": "9.1.1",
"tslib": "2.0.0",
"typescript": "4.2.2",
"typescript": "4.4.4",
"webpack": "5.11.0",
"webpack-cli": "4.2.0",
"webpack-dev-server": "3.11.2"

View File

@ -1,12 +1,27 @@
{
"compilerOptions": {
"strict": true,
"target": "es2019",
"typeRoots": ["./node_modules/@types", "./typings"],
"module": "commonjs",
"lib": ["dom", "esnext"],
"declaration": true,
"declarationMap": true,
"jsx": "react",
"pretty": true,
"sourceMap": true,
"baseUrl": "./src",
/* Additional Checks */
"noUnusedLocals": true,
"noUnusedParameters": true,
"resolveJsonModule": true,
"target": "es2019",
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
/* Module Resolution Options */
"moduleResolution": "node",
"jsx": "react",
"typeRoots": ["./node_modules/@types", "./typings"]
}
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"allowJs": true,
},
"exclude": ["test", "release/build", "release/app/dist", ".erb/dll"]
}

View File

@ -14,17 +14,19 @@
* limitations under the License.
*/
import * as CopyPlugin from 'copy-webpack-plugin';
import CopyPlugin from 'copy-webpack-plugin';
import { readdirSync } from 'fs';
import * as _ from 'lodash';
import * as os from 'os';
import outdent from 'outdent';
import * as path from 'path';
import { env } from 'process';
import * as SimpleProgressWebpackPlugin from 'simple-progress-webpack-plugin';
import * as TerserPlugin from 'terser-webpack-plugin';
import SimpleProgressWebpackPlugin from 'simple-progress-webpack-plugin';
import TerserPlugin from 'terser-webpack-plugin';
import { BannerPlugin, NormalModuleReplacementPlugin } from 'webpack';
import * as PnpWebpackPlugin from 'pnp-webpack-plugin';
import PnpWebpackPlugin from 'pnp-webpack-plugin';
import * as tsconfigRaw from './tsconfig.webpack.json';
/**
* Don't webpack package.json as mixpanel & sentry tokens
@ -141,13 +143,13 @@ const commonConfig = {
minimize: true,
minimizer: [
new TerserPlugin({
parallel: true,
terserOptions: {
compress: false,
mangle: false,
output: {
beautify: true,
format: {
comments: false,
ecma: 2018,
ecma: 2020,
},
},
extractComments: false,
@ -173,9 +175,11 @@ const commonConfig = {
test: /\.tsx?$/,
use: [
{
loader: 'ts-loader',
loader: 'esbuild-loader',
options: {
configFile: 'tsconfig.webpack.json',
loader: 'tsx',
target: 'es2021',
tsconfigRaw,
},
},
],