From e7376ca6b81dd4f45614b8fe7355a2ca9afe3fa0 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 9 Aug 2025 15:20:58 +0200 Subject: [PATCH] cli: switch out eslint and ts-checker plugins Signed-off-by: Patrik Oldsberg --- .changeset/honest-snakes-draw.md | 4 +- packages/cli/package.json | 16 +- .../src/modules/build/lib/bundler/config.ts | 15 +- yarn.lock | 161 ++++++++++++++++-- 4 files changed, 177 insertions(+), 19 deletions(-) diff --git a/.changeset/honest-snakes-draw.md b/.changeset/honest-snakes-draw.md index e43a337576..f7a5ffe830 100644 --- a/.changeset/honest-snakes-draw.md +++ b/.changeset/honest-snakes-draw.md @@ -10,9 +10,11 @@ "@module-federation/enhanced": "^0.9.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "esbuild-loader": "^4.0.0", + "eslint-webpack-plugin": "^4.2.0", + "fork-ts-checker-webpack-plugin": "^9.0.0", "mini-css-extract-plugin": "^2.4.2", "terser-webpack-plugin": "^5.1.3", - "webpack": "^5.94.0", + "webpack": "^5.96.0", "webpack-dev-server": "^5.0.0" } } diff --git a/packages/cli/package.json b/packages/cli/package.json index b05ea0cdec..89a78020aa 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -58,6 +58,7 @@ "@backstage/release-manifests": "workspace:^", "@backstage/types": "workspace:^", "@manypkg/get-packages": "^1.1.3", + "@module-federation/enhanced": "^0.9.0", "@octokit/graphql": "^5.0.0", "@octokit/graphql-schema": "^13.7.0", "@octokit/oauth-app": "^4.2.0", @@ -101,9 +102,8 @@ "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-unused-imports": "^4.1.4", - "eslint-webpack-plugin": "^4.2.0", + "eslint-rspack-plugin": "^4.2.1", "express": "^4.17.1", - "fork-ts-checker-webpack-plugin": "^9.0.0", "fs-extra": "^11.2.0", "git-url-parse": "^15.0.0", "glob": "^7.1.7", @@ -142,6 +142,7 @@ "sucrase": "^3.20.2", "swc-loader": "^0.2.3", "tar": "^6.1.12", + "ts-checker-rspack-plugin": "^1.1.5", "ts-morph": "^24.0.0", "undici": "^7.2.3", "util": "^0.12.3", @@ -169,7 +170,6 @@ "@backstage/plugin-scaffolder-node-test-utils": "workspace:^", "@backstage/test-utils": "workspace:^", "@backstage/theme": "workspace:^", - "@module-federation/enhanced": "^0.9.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@types/cross-spawn": "^6.0.2", "@types/ejs": "^3.1.3", @@ -189,6 +189,8 @@ "@types/yarnpkg__lockfile": "^1.1.4", "del": "^8.0.0", "esbuild-loader": "^4.0.0", + "eslint-webpack-plugin": "^4.2.0", + "fork-ts-checker-webpack-plugin": "^9.0.0", "mini-css-extract-plugin": "^2.4.2", "msw": "^1.0.0", "nodemon": "^3.0.1", @@ -200,6 +202,8 @@ "@module-federation/enhanced": "^0.9.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "esbuild-loader": "^4.0.0", + "eslint-webpack-plugin": "^4.2.0", + "fork-ts-checker-webpack-plugin": "^9.0.0", "mini-css-extract-plugin": "^2.4.2", "terser-webpack-plugin": "^5.1.3", "webpack": "~5.96.0", @@ -215,6 +219,12 @@ "esbuild-loader": { "optional": true }, + "eslint-webpack-plugin": { + "optional": true + }, + "fork-ts-checker-webpack-plugin": { + "optional": true + }, "mini-css-extract-plugin": { "optional": true }, diff --git a/packages/cli/src/modules/build/lib/bundler/config.ts b/packages/cli/src/modules/build/lib/bundler/config.ts index 718c034b1a..c4011ede48 100644 --- a/packages/cli/src/modules/build/lib/bundler/config.ts +++ b/packages/cli/src/modules/build/lib/bundler/config.ts @@ -20,8 +20,8 @@ import { rspack, Configuration } from '@rspack/core'; import { BundlingPaths } from './paths'; import { Config } from '@backstage/config'; -import ESLintPlugin from 'eslint-webpack-plugin'; -import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; +import ESLintRspackPlugin from 'eslint-rspack-plugin'; +import { TsCheckerRspackPlugin } from 'ts-checker-rspack-plugin'; import HtmlWebpackPlugin from 'html-webpack-plugin'; import ModuleScopePlugin from 'react-dev-utils/ModuleScopePlugin'; import { ModuleFederationPlugin } from '@module-federation/enhanced/rspack'; @@ -156,11 +156,18 @@ export async function createConfig( } if (checksEnabled) { + const TsCheckerPlugin = webpack + ? (require('fork-ts-checker-webpack-plugin') as typeof import('fork-ts-checker-webpack-plugin')) + : TsCheckerRspackPlugin; + const ESLintPlugin = webpack + ? (require('eslint-webpack-plugin') as typeof import('eslint-webpack-plugin')) + : ESLintRspackPlugin; plugins.push( - new ForkTsCheckerWebpackPlugin({ - typescript: { configFile: paths.targetTsConfig, memoryLimit: 4096 }, + new TsCheckerPlugin({ + typescript: { configFile: paths.targetTsConfig, memoryLimit: 8192 }, }), new ESLintPlugin({ + cache: false, // Cache seems broken context: paths.targetPath, files: ['**/*.(ts|tsx|mts|cts|js|jsx|mjs|cjs)'], }), diff --git a/yarn.lock b/yarn.lock index 7360d7a559..8447d29ce8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1896,14 +1896,14 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.24.2, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2, @babel/code-frame@npm:^7.8.3": - version: 7.26.2 - resolution: "@babel/code-frame@npm:7.26.2" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.24.2, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.8.3": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.27.1" js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10/db2c2122af79d31ca916755331bb4bac96feb2b334cdaca5097a6b467fdd41963b89b14b6836a14f083de7ff887fc78fa1b3c10b14e743d33e12dbfe5ee3d223 + picocolors: "npm:^1.1.1" + checksum: 10/721b8a6e360a1fa0f1c9fe7351ae6c874828e119183688b533c477aa378f1010f37cc9afbfc4722c686d1f5cdd00da02eab4ba7278a0c504fa0d7a321dcd4fdf languageName: node linkType: hard @@ -3029,6 +3029,7 @@ __metadata: eslint-plugin-react: "npm:^7.37.2" eslint-plugin-react-hooks: "npm:^5.0.0" eslint-plugin-unused-imports: "npm:^4.1.4" + eslint-rspack-plugin: "npm:^4.2.1" eslint-webpack-plugin: "npm:^4.2.0" express: "npm:^4.17.1" fork-ts-checker-webpack-plugin: "npm:^9.0.0" @@ -3074,6 +3075,7 @@ __metadata: swc-loader: "npm:^0.2.3" tar: "npm:^6.1.12" terser-webpack-plugin: "npm:^5.1.3" + ts-checker-rspack-plugin: "npm:^1.1.5" ts-morph: "npm:^24.0.0" undici: "npm:^7.2.3" util: "npm:^0.12.3" @@ -3089,6 +3091,8 @@ __metadata: "@module-federation/enhanced": ^0.9.0 "@pmmmwh/react-refresh-webpack-plugin": ^0.5.7 esbuild-loader: ^4.0.0 + eslint-webpack-plugin: ^4.2.0 + fork-ts-checker-webpack-plugin: ^9.0.0 mini-css-extract-plugin: ^2.4.2 terser-webpack-plugin: ^5.1.3 webpack: ~5.96.0 @@ -3100,6 +3104,10 @@ __metadata: optional: true esbuild-loader: optional: true + eslint-webpack-plugin: + optional: true + fork-ts-checker-webpack-plugin: + optional: true mini-css-extract-plugin: optional: true terser-webpack-plugin: @@ -10301,6 +10309,73 @@ __metadata: languageName: node linkType: hard +"@jsonjoy.com/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@jsonjoy.com/base64@npm:1.1.2" + peerDependencies: + tslib: 2 + checksum: 10/d76bb58eff841c090d9bf69a073611ffa73c40a664ccbcea689f65961f57d7b24051269d06b437e4f6204285d6ba92f50f587c5e95c5f9e4f10b36a2ed4cd0c8 + languageName: node + linkType: hard + +"@jsonjoy.com/buffers@npm:^1.0.0": + version: 1.0.0 + resolution: "@jsonjoy.com/buffers@npm:1.0.0" + peerDependencies: + tslib: 2 + checksum: 10/3347a16a555398c19265203877b8e325be5facc1d875c0e85db0cc20b53418302257ed5af15bf53b84ff8337bd024a10be25ff3a02ebc54ae8e643577ca29e63 + languageName: node + linkType: hard + +"@jsonjoy.com/codegen@npm:^1.0.0": + version: 1.0.0 + resolution: "@jsonjoy.com/codegen@npm:1.0.0" + peerDependencies: + tslib: 2 + checksum: 10/a0afb03d2af4fbc1377c547e507f5db99a25f515d8c4b6b2cef1ff28145ac59fff12b6e1f41f9734cb62ea5619e7f9be1acd0908305d6f4176898ee534ee9a64 + languageName: node + linkType: hard + +"@jsonjoy.com/json-pack@npm:^1.0.3": + version: 1.10.0 + resolution: "@jsonjoy.com/json-pack@npm:1.10.0" + dependencies: + "@jsonjoy.com/base64": "npm:^1.1.2" + "@jsonjoy.com/buffers": "npm:^1.0.0" + "@jsonjoy.com/codegen": "npm:^1.0.0" + "@jsonjoy.com/json-pointer": "npm:^1.0.1" + "@jsonjoy.com/util": "npm:^1.9.0" + hyperdyperid: "npm:^1.2.0" + thingies: "npm:^2.5.0" + peerDependencies: + tslib: 2 + checksum: 10/5ad1eb008cf5f681dbc1301f5a7c33ca3a101d22773dbd2a9db4b02e5847c2f8b0c5f074c69f4ced5c24b3dc1dd85ddbc1688f0002fee9416869c579c34c4a8e + languageName: node + linkType: hard + +"@jsonjoy.com/json-pointer@npm:^1.0.1": + version: 1.0.1 + resolution: "@jsonjoy.com/json-pointer@npm:1.0.1" + dependencies: + "@jsonjoy.com/util": "npm:^1.3.0" + peerDependencies: + tslib: 2 + checksum: 10/ff15df95df38677a09fe2155cf4521844c9f0653c77a7090bb6e726d275fb78ab6c3543c4ebdc14aff07e44da08b1545631a63e42e217c18059194957e060ed9 + languageName: node + linkType: hard + +"@jsonjoy.com/util@npm:^1.3.0, @jsonjoy.com/util@npm:^1.9.0": + version: 1.9.0 + resolution: "@jsonjoy.com/util@npm:1.9.0" + dependencies: + "@jsonjoy.com/buffers": "npm:^1.0.0" + "@jsonjoy.com/codegen": "npm:^1.0.0" + peerDependencies: + tslib: 2 + checksum: 10/1a6e5301d725a7161b93ff707eb1a954bf4552a2fa96eee9a960d3ae3ed5f993d18b56dcff29e98036341a5968c5d1b2dfe21f76695390e7f0d89b81f24c85e0 + languageName: node + linkType: hard + "@juggle/resize-observer@npm:^3.3.1": version: 3.3.1 resolution: "@juggle/resize-observer@npm:3.3.1" @@ -16870,7 +16945,7 @@ __metadata: languageName: node linkType: hard -"@rspack/lite-tapable@npm:1.0.1": +"@rspack/lite-tapable@npm:1.0.1, @rspack/lite-tapable@npm:^1.0.1": version: 1.0.1 resolution: "@rspack/lite-tapable@npm:1.0.1" checksum: 10/240b7832965bca5a52d1f03a8539dab5810958ce24b5a670405b2505d81350f10d668f4055648f5918bc18ac033e637bcb7f92189345f0f2f671b546019c2f9e @@ -29850,6 +29925,21 @@ __metadata: languageName: node linkType: hard +"eslint-rspack-plugin@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-rspack-plugin@npm:4.2.1" + dependencies: + "@types/eslint": "npm:^8.56.10" + jest-worker: "npm:^29.7.0" + micromatch: "npm:^4.0.8" + normalize-path: "npm:^3.0.0" + schema-utils: "npm:^4.2.0" + peerDependencies: + eslint: ^8.0.0 || ^9.0.0 + checksum: 10/c45639e660d13af63c58f8f80103a033f607b9d635d9315d7d859408134cc35e2e3f981805f7abdd6061ec9d8207cfc7c0d5a097df9ac8c7ccd707ca5aa14583 + languageName: node + linkType: hard + "eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -33249,6 +33339,13 @@ __metadata: languageName: node linkType: hard +"hyperdyperid@npm:^1.2.0": + version: 1.2.0 + resolution: "hyperdyperid@npm:1.2.0" + checksum: 10/64abb5568ff17aa08ac0175ae55e46e22831c5552be98acdd1692081db0209f36fff58b31432017b4e1772c178962676a2cc3c54e4d5d7f020d7710cec7ad7a6 + languageName: node + linkType: hard + "hyphenate-style-name@npm:^1.0.3": version: 1.0.3 resolution: "hyphenate-style-name@npm:1.0.3" @@ -37837,12 +37934,15 @@ __metadata: languageName: node linkType: hard -"memfs@npm:^4.6.0": - version: 4.7.7 - resolution: "memfs@npm:4.7.7" +"memfs@npm:^4.28.0, memfs@npm:^4.6.0": + version: 4.36.0 + resolution: "memfs@npm:4.36.0" dependencies: + "@jsonjoy.com/json-pack": "npm:^1.0.3" + "@jsonjoy.com/util": "npm:^1.3.0" + tree-dump: "npm:^1.0.1" tslib: "npm:^2.0.0" - checksum: 10/311633e5857c91f41021b43f00eda8d540fed2c2d9e02c780fe78de720cfb55d15ab2d5b5ce9f2576637589b82e84488f1b9ff503563e817ed65200ad24617fb + checksum: 10/4898187c3278bd127340ec3d6c51d1fa77faa50aad71a8a1e4b7c02abbccd8485dccc7f565291b386b0cc96e5ac06902e4645108fad44e458fe8c1dfee3caf42 languageName: node linkType: hard @@ -47369,6 +47469,15 @@ __metadata: languageName: node linkType: hard +"thingies@npm:^2.5.0": + version: 2.5.0 + resolution: "thingies@npm:2.5.0" + peerDependencies: + tslib: ^2 + checksum: 10/b8b028a474aab798ff12ad5a5648306059976d3e23870327ae4ef640012953314b1d7f208dd5a8e9ebaeee6dd1cdb05503bb829699ee8f36514c37f771f2f035 + languageName: node + linkType: hard + "throttle-debounce@npm:^3.0.1": version: 3.0.1 resolution: "throttle-debounce@npm:3.0.1" @@ -47668,6 +47777,15 @@ __metadata: languageName: node linkType: hard +"tree-dump@npm:^1.0.1": + version: 1.0.3 + resolution: "tree-dump@npm:1.0.3" + peerDependencies: + tslib: 2 + checksum: 10/cf382e61cfb5e3ff8f03425b5bc1923e8f0e385b3a02f43d9d0a32d09da9984477e0f2a7698628662263d1d3f1af17e33486c77ff454978f0f9f07fb5d1fe9a2 + languageName: node + linkType: hard + "tree-kill@npm:^1.2.2": version: 1.2.2 resolution: "tree-kill@npm:1.2.2" @@ -47764,6 +47882,27 @@ __metadata: languageName: node linkType: hard +"ts-checker-rspack-plugin@npm:^1.1.5": + version: 1.1.5 + resolution: "ts-checker-rspack-plugin@npm:1.1.5" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@rspack/lite-tapable": "npm:^1.0.1" + chokidar: "npm:^3.6.0" + is-glob: "npm:^4.0.3" + memfs: "npm:^4.28.0" + minimatch: "npm:^9.0.5" + picocolors: "npm:^1.1.1" + peerDependencies: + "@rspack/core": ^1.0.0 + typescript: ">=3.8.0" + peerDependenciesMeta: + "@rspack/core": + optional: true + checksum: 10/d43f87a5860f3b8f528bf8f43c78c2d958a18fa484d791a204047fc5672134fd689665021ee25b07f9f9d8c807cd291978f58b789bf531b4704a9a4e3ad84735 + languageName: node + linkType: hard + "ts-dedent@npm:^2.0.0, ts-dedent@npm:^2.2.0": version: 2.2.0 resolution: "ts-dedent@npm:2.2.0"