/
githubmirror
/
grafana
Обзор
Документация
Войти
/
githubmirror
/
grafana
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
scripts/webpack/webpack.prod.ts
103 строки
3 KB
Ashley Harrison
React 19: remove double builds (#129850)
10 авг 2026, 12:38
Не верифицирован
10 авг 2026, 12:38
35c8b2a
Код
Авторство
О чём код?
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin'; import { EsbuildPlugin } from 'esbuild-loader'; import { createRequire } from 'node:module'; import path from 'node:path'; import { type Configuration } from 'webpack'; import { WebpackAssetsManifest } from 'webpack-assets-manifest'; import { WebpackManifestPlugin } from 'webpack-manifest-plugin'; import { merge } from 'webpack-merge'; import FeatureFlaggedSRIPlugin from './plugins/FeatureFlaggedSriPlugin.ts'; import { manifestPluginOptions } from './plugins/assetsManifest.ts'; import { esbuildOptions } from './rules.ts'; import common, { type Env } from './webpack.common.ts'; import swaggerConfig from './webpack.swagger.ts'; // SRI plugin has broken esm builds so we use require. // https://github.com/waysact/webpack-subresource-integrity/issues/236 const require = createRequire(import.meta.url); const { SubresourceIntegrityPlugin } = require('webpack-subresource-integrity'); export default (env: Env = {}) => { const prodConfig: Configuration = { name: 'grafana', mode: 'production', devtool: process.env.NO_SOURCEMAP === '1' ? false : 'source-map', output: { crossOriginLoading: 'anonymous', }, optimization: { nodeEnv: 'production', minimize: Number(env.noMinify) !== 1, minimizer: [new EsbuildPlugin(esbuildOptions), new CssMinimizerPlugin()], runtimeChunk: 'single', splitChunks: { chunks: 'all', minChunks: 1, cacheGroups: { moment: { test: /[\\/]node_modules[\\/]moment[\\/].*[jt]sx?$/, chunks: 'initial', priority: 20, enforce: true, }, defaultVendors: { test: /[\\/]node_modules[\\/].*[jt]sx?$/, chunks: 'initial', priority: -10, reuseExistingChunk: true, enforce: true, }, default: { priority: -20, chunks: 'all', test: /.*[jt]sx?$/, reuseExistingChunk: true, }, }, }, }, // enable persistent cache for faster builds cache: Number(env.noMinify) === 1 ? false : { type: 'filesystem', name: 'grafana-default-production', buildDependencies: { config: [import.meta.filename], }, }, plugins: [ new SubresourceIntegrityPlugin(), new FeatureFlaggedSRIPlugin(), /** * I know we have two manifest plugins here. * WebpackManifestPlugin was only used in prod before and does not support integrity hashes */ new WebpackAssetsManifest({ ...manifestPluginOptions, output: 'assets-manifest.json', }), new WebpackManifestPlugin({ fileName: path.join(process.cwd(), 'manifest.json'), filter: (file) => !file.name.endsWith('.map'), }), function () { this.hooks.done.tap('Done', function (stats) { if (stats.compilation.errors && stats.compilation.errors.length) { console.log(stats.compilation.errors); process.exit(1); } }); }, ], }; const mergedProdConfig = merge(common(env), prodConfig); const multipleConfigs = Object.assign([mergedProdConfig, swaggerConfig(env)], { parallelism: 2 }); return multipleConfigs; };