mirror of
https://github.com/grafana/grafana.git
synced 2026-06-13 10:30:42 -04:00
* build(webpack): add tsconfig.json for Node strip-types compliance * build(webpack): extract shared esbuild options to esbuild.ts * build(webpack): add package.json to declare ESM module type * build(webpack): convert sass.rule to TypeScript * build(webpack): convert CorsWorkerPlugin to TypeScript * build(webpack): convert FeatureFlaggedSriPlugin to TypeScript * build(webpack): convert webpack.common to TypeScript, add theme entries * build(webpack): convert webpack.dev to TypeScript, remove esbuild duplication * build(webpack): convert webpack.prod to TypeScript, remove esbuild duplication * build(webpack): fix TypeScript types in webpack.prod transform callback * build(webpack): convert webpack.stats to TypeScript * build(webpack): update scripts to use TypeScript webpack configs * build(webpack): simplify env-util to use import.meta.dirname directly * build(webpack): tidy up plugins * build(webpack): move rules for ts and sass into single module * build(webpack): consolidate shared config into common, move splitChunks to prod - Move MiniCssExtractPlugin, esbuildRule and sassRule into common so both dev and prod configs share them without duplication - Move splitChunks/runtimeChunk optimisation to webpack.prod only (not needed in dev) - Use require() for SubresourceIntegrityPlugin to work around broken ESM build (waysact/webpack-subresource-integrity#236) - Refactor conditional plugin logic in dev from ternary to if-blocks * build(webpack): remove dead import and clarify webpack destructure pattern - Remove unused MiniCssExtractPlugin import from webpack.prod (moved to common) - Add comment explaining why DefinePlugin/EnvironmentPlugin are destructured from the default webpack import rather than using named ESM imports * style(webpack): reorder consts * chore(env-util): fix up env-util and webpack configs so tests continue to run * refactor(env-util): accept grafanaRoot param instead of relying on __dirname Removes the global.__dirname mutation hack in webpack.common.ts by making the grafana root path an explicit argument to getEnvConfig. Each caller resolves its own root and passes it in, removing the implicit path-depth contract and the CJS/ESM compatibility workaround. * build(webpack): remove unused angular chunk group
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { RsdoctorWebpackPlugin } from '@rsdoctor/webpack-plugin';
|
|
import type { Configuration } from 'webpack';
|
|
import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
|
|
import { merge } from 'webpack-merge';
|
|
|
|
import { FilterStatsPlugin } from './plugins/FilterStatsPlugin.ts';
|
|
import type { Env } from './webpack.common.ts';
|
|
import prodConfig from './webpack.prod.ts';
|
|
|
|
export default (env: Env = {}) => {
|
|
const bundleAnalyzerOpts: BundleAnalyzerPlugin.Options = env.filtered
|
|
? {
|
|
analyzerMode: 'static',
|
|
reportFilename: 'bundle-stats.html',
|
|
openAnalyzer: false,
|
|
generateStatsFile: false,
|
|
}
|
|
: {};
|
|
|
|
const config: Configuration = {
|
|
plugins: [new BundleAnalyzerPlugin(bundleAnalyzerOpts)],
|
|
};
|
|
|
|
// yarn build:smolstats
|
|
if (env.filtered) {
|
|
config.plugins?.push(
|
|
new FilterStatsPlugin({
|
|
exclude: /@kusto|monaco-editor|public\/locales/,
|
|
minDominance: 0.75,
|
|
})
|
|
);
|
|
}
|
|
|
|
// yarn build:stats --env doctor
|
|
if (env.doctor) {
|
|
config.plugins?.push(new RsdoctorWebpackPlugin());
|
|
}
|
|
|
|
// disable hashing in output filenames to make them easier to identify
|
|
// yarn build:stats --env doctor --env namedChunks
|
|
if (env.namedChunks) {
|
|
config.optimization = {
|
|
chunkIds: 'named',
|
|
};
|
|
config.output = {
|
|
filename: '[name].js',
|
|
chunkFilename: '[name].js',
|
|
};
|
|
}
|
|
|
|
return merge(prodConfig(env), config);
|
|
};
|