(core) Speed up and upgrade build.

Summary:
- Upgrades to build-related packages:
  - Upgrade typescript, related libraries and typings.
  - Upgrade webpack, eslint; add tsc-watch, node-dev, eslint_d.

- Build organization changes:
  - Build webpack from original typescript, transpiling only; with errors still
    reported by a background tsc watching process.

- Typescript-related changes:
  - Reduce imports of AWS dependencies (very noticeable speedup)
  - Avoid auto-loading global @types
  - Client code is now built with isolatedModules flag (for safe transpilation)
  - Use allowJs to avoid copying JS files manually.

- Linting changes
  - Enhance Arcanist ESLintLinter to run before/after commands, and set up to use eslint_d
  - Update eslint config, and include .eslintignore to avoid linting generated files.
  - Include a bunch of eslint-prompted and eslint-generated fixes
  - Add no-unused-expression rule to eslint, and fix a few warnings about it

- Other items:
  - Refactor cssInput to avoid circular dependency
  - Remove a bit of unused code, libraries, dependencies

Test Plan: No behavior changes, all existing tests pass. There are 30 tests fewer reported because `test_gpath.py` was removed (it's been unused for years)

Reviewers: paulfitz

Reviewed By: paulfitz

Subscribers: paulfitz

Differential Revision: https://phab.getgrist.com/D3498
This commit is contained in:
Dmitry S
2022-06-27 16:09:41 -04:00
parent 64ff9ccd0a
commit dd2eadc86e
45 changed files with 948 additions and 2442 deletions

View File

@@ -1,10 +1,12 @@
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"target": "es2016",
"target": "es2017",
"module": "commonjs",
"strict": true,
"strictPropertyInitialization": false,
"useUnknownInCatchVariables": false,
"skipLibCheck": true,
"sourceMap": true,
"noImplicitAny": true,
"noUnusedLocals": true,
@@ -22,6 +24,7 @@
],
},
"composite": true,
"types" : [],
"plugins": [{
"name": "typescript-eslint-language-service"
}],

View File

@@ -3,9 +3,26 @@ const path = require('path');
module.exports = {
target: 'web',
mode: 'production',
entry: "./_build/app/client/browserCheck.js",
entry: "./app/client/browserCheck",
output: {
path: path.resolve("./static"),
filename: "browser-check.js"
},
resolve: {
extensions: ['.ts', '.js'],
},
module: {
rules: [
{
test: /\.(js|ts)?$/,
loader: 'esbuild-loader',
options: {
loader: 'ts',
target: 'es2017',
sourcemap: true,
},
exclude: /node_modules/
},
]
}
};

View File

@@ -1,13 +1,13 @@
const StatsPlugin = require('stats-webpack-plugin');
const MomentLocalesPlugin = require('moment-locales-webpack-plugin');
const { ProvidePlugin } = require('webpack');
const path = require('path');
module.exports = {
target: 'web',
entry: {
main: "app/client/app.js",
errorPages: "app/client/errorMain.js",
account: "app/client/accountMain.js",
main: "app/client/app",
errorPages: "app/client/errorMain",
account: "app/client/accountMain",
},
output: {
filename: "[name].bundle.js",
@@ -32,15 +32,29 @@ module.exports = {
// typescript ("cheap-module-eval-source-map" is faster, but breakpoints are largely broken).
devtool: "source-map",
resolve: {
extensions: ['.ts', '.js'],
modules: [
path.resolve('./_build'),
path.resolve('./_build/ext'),
path.resolve('./_build/stubs'),
path.resolve('.'),
path.resolve('./ext'),
path.resolve('./stubs'),
path.resolve('./node_modules')
],
fallback: {
'path': require.resolve("path-browserify"),
},
},
module: {
rules: [
{
test: /\.(js|ts)?$/,
loader: 'esbuild-loader',
options: {
loader: 'ts',
target: 'es2017',
sourcemap: true,
},
exclude: /node_modules/
},
{ test: /\.js$/,
use: ["source-map-loader"],
enforce: "pre"
@@ -48,10 +62,11 @@ module.exports = {
]
},
plugins: [
new StatsPlugin(
'../.build_stats_js_bundle', // relative to output folder
{source: false}, // Omit sources, which unnecessarily make the stats file huge.
),
// Some modules assume presence of Buffer and process.
new ProvidePlugin({
process: 'process/browser',
Buffer: ['buffer', 'Buffer']
}),
// To strip all locales except “en”
new MomentLocalesPlugin()
],