From 7584e613631abc86941708ee91ebe246fde5a224 Mon Sep 17 00:00:00 2001 From: Jack Westbrook Date: Wed, 14 Feb 2024 12:34:07 +0100 Subject: [PATCH] build(webpack): add getDecoupledPlugins to automatically ignore when watching --- package.json | 1 + scripts/webpack/webpack.dev.js | 17 +++++----- yarn.lock | 59 ++++++++++++++++++++++++++++++++-- 3 files changed, 65 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 13261a29864..23a93b6ff68 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "@grafana/eslint-config": "7.0.0", "@grafana/eslint-plugin": "link:./packages/grafana-eslint-rules", "@grafana/tsconfig": "^1.3.0-rc1", + "@manypkg/get-packages": "^2.2.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11", "@react-types/button": "3.9.1", "@react-types/menu": "3.9.6", diff --git a/scripts/webpack/webpack.dev.js b/scripts/webpack/webpack.dev.js index 523ae685fd9..eca2fd0c9d6 100644 --- a/scripts/webpack/webpack.dev.js +++ b/scripts/webpack/webpack.dev.js @@ -1,4 +1,5 @@ 'use strict'; +const { getPackagesSync } = require('@manypkg/get-packages'); const browserslist = require('browserslist'); const { resolveToEsbuildTarget } = require('esbuild-plugin-browserslist'); const ESLintPlugin = require('eslint-webpack-plugin'); @@ -19,6 +20,12 @@ const esbuildOptions = { format: undefined, }; +// To speed up webpack and prevent unnecessary rebuilds we ignore decoupled packages +function getDecoupledPlugins() { + const { packages } = getPackagesSync(process.cwd()); + return packages.filter((pkg) => pkg.dir.includes('plugins/datasource')).map((pkg) => `${pkg.dir}/**`); +} + module.exports = (env = {}) => { return merge(common, { devtool: 'source-map', @@ -32,15 +39,7 @@ module.exports = (env = {}) => { // If we enabled watch option via CLI watchOptions: { - ignored: [ - '/node_modules/', - '**/plugins/datasource/azuremonitor/**', - '**/plugins/datasource/cloud-monitoring/**', - '**/plugins/datasource/grafana-pyroscope-datasource/**', - '**/plugins/datasource/grafana-testdata-datasource/**', - '**/plugins/datasource/parca/**', - '**/plugins/datasource/tempo/**', - ], + ignored: ['/node_modules/', ...getDecoupledPlugins()], }, resolve: { diff --git a/yarn.lock b/yarn.lock index bac0f1684ef..6bd11486f19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5013,6 +5013,39 @@ __metadata: languageName: node linkType: hard +"@manypkg/find-root@npm:^2.2.0": + version: 2.2.1 + resolution: "@manypkg/find-root@npm:2.2.1" + dependencies: + "@manypkg/tools": "npm:^1.1.0" + find-up: "npm:^4.1.0" + fs-extra: "npm:^8.1.0" + checksum: 10/7f31120c3ef0711f6e65857ea232fb4f7caf4db388080e738f82d979d7f72572dae60519c8fcd45c431a8e94095b6628257fbf7373b34401359def00687bab13 + languageName: node + linkType: hard + +"@manypkg/get-packages@npm:^2.2.0": + version: 2.2.0 + resolution: "@manypkg/get-packages@npm:2.2.0" + dependencies: + "@manypkg/find-root": "npm:^2.2.0" + "@manypkg/tools": "npm:^1.1.0" + checksum: 10/2a78240d8d9cf32250204d02e7b693ad728129be0f01c6049593e0c90ad44eca0e3334521faca8eff42939219313517173b5c983be036ff7ef3218bc8b7f8f30 + languageName: node + linkType: hard + +"@manypkg/tools@npm:^1.1.0": + version: 1.1.0 + resolution: "@manypkg/tools@npm:1.1.0" + dependencies: + fs-extra: "npm:^8.1.0" + globby: "npm:^11.0.0" + jju: "npm:^1.4.0" + read-yaml-file: "npm:^1.1.0" + checksum: 10/85bd2a656c46a475a8f7232515302ffc374005f8cea893e2505271a757fc14accca40e298f7c3acd0df2277ab436b30efeb22af5c6b0d7cd238bc413456a150b + languageName: node + linkType: hard + "@mapbox/jsonlint-lines-primitives@npm:~2.0.2": version: 2.0.2 resolution: "@mapbox/jsonlint-lines-primitives@npm:2.0.2" @@ -18127,7 +18160,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:11.1.0, globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.1.0": +"globby@npm:11.1.0, globby@npm:^11.0.0, globby@npm:^11.0.1, globby@npm:^11.0.2, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -18184,7 +18217,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.8, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.8, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 @@ -18235,6 +18268,7 @@ __metadata: "@locker/near-membrane-dom": "npm:0.13.6" "@locker/near-membrane-shared": "npm:0.13.6" "@locker/near-membrane-shared-dom": "npm:0.13.6" + "@manypkg/get-packages": "npm:^2.2.0" "@msagl/core": "npm:^1.1.16" "@msagl/parser": "npm:^1.1.16" "@opentelemetry/api": "npm:1.7.0" @@ -20970,6 +21004,13 @@ __metadata: languageName: node linkType: hard +"jju@npm:^1.4.0": + version: 1.4.0 + resolution: "jju@npm:1.4.0" + checksum: 10/1067ff8ce02221faac5a842116ed0ec79a53312a111d0bf8342a80bd02c0a3fdf0b8449694a65947db0a3e8420e8b326dffb489c7dd5866efc380c0d1708a707 + languageName: node + linkType: hard + "joycon@npm:^3.1.1": version: 3.1.1 resolution: "joycon@npm:3.1.1" @@ -21016,7 +21057,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -26830,6 +26871,18 @@ __metadata: languageName: node linkType: hard +"read-yaml-file@npm:^1.1.0": + version: 1.1.0 + resolution: "read-yaml-file@npm:1.1.0" + dependencies: + graceful-fs: "npm:^4.1.5" + js-yaml: "npm:^3.6.1" + pify: "npm:^4.0.1" + strip-bom: "npm:^3.0.0" + checksum: 10/41ee5f075507ef0403328dd54e225a61c3149f915675ce7fd0fd791ddcce2e6c30a9fe0f76ffa7a465c1c157b9b4ad8ded1dcf47dc3b396103eeb013490bbc2e + languageName: node + linkType: hard + "read@npm:^2.0.0": version: 2.1.0 resolution: "read@npm:2.1.0"