[DevTools] Use a single Webpack config for the extensions (#34513)

This commit is contained in:
Sebastian "Sebbie" Silbermann 2025-09-17 15:45:25 +02:00 committed by GitHub
parent 81d66927af
commit 27b4076ab0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 145 deletions

View File

@ -66,14 +66,6 @@ const build = async (tempPath, manifestPath, envExtension = {}) => {
stdio: 'inherit', stdio: 'inherit',
}, },
); );
execSync(
`${webpackPath} --config webpack.backend.js --output-path ${binPath}`,
{
cwd: __dirname,
env: mergedEnv,
stdio: 'inherit',
},
);
// Make temp dir // Make temp dir
await ensureDir(zipPath); await ensureDir(zipPath);

View File

@ -1,135 +0,0 @@
'use strict';
const {resolve, isAbsolute, relative} = require('path');
const Webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
const {resolveFeatureFlags} = require('react-devtools-shared/buildUtils');
const SourceMapIgnoreListPlugin = require('react-devtools-shared/SourceMapIgnoreListPlugin');
const {GITHUB_URL, getVersionString} = require('./utils');
const NODE_ENV = process.env.NODE_ENV;
if (!NODE_ENV) {
console.error('NODE_ENV not set');
process.exit(1);
}
const builtModulesDir = resolve(
__dirname,
'..',
'..',
'build',
'oss-experimental',
);
const __DEV__ = NODE_ENV === 'development';
const DEVTOOLS_VERSION = getVersionString(process.env.DEVTOOLS_VERSION);
const IS_CHROME = process.env.IS_CHROME === 'true';
const IS_FIREFOX = process.env.IS_FIREFOX === 'true';
const IS_EDGE = process.env.IS_EDGE === 'true';
const featureFlagTarget = process.env.FEATURE_FLAG_TARGET || 'extension-oss';
module.exports = {
mode: __DEV__ ? 'development' : 'production',
devtool: false,
entry: {
backend: './src/backend.js',
},
output: {
path: __dirname + '/build',
filename: 'react_devtools_backend_compact.js',
},
node: {
global: false,
},
resolve: {
alias: {
react: resolve(builtModulesDir, 'react'),
'react-debug-tools': resolve(builtModulesDir, 'react-debug-tools'),
'react-devtools-feature-flags': resolveFeatureFlags(featureFlagTarget),
'react-dom': resolve(builtModulesDir, 'react-dom'),
'react-is': resolve(builtModulesDir, 'react-is'),
scheduler: resolve(builtModulesDir, 'scheduler'),
},
},
optimization: {
minimize: !__DEV__,
minimizer: [
new TerserPlugin({
terserOptions: {
compress: {
unused: true,
dead_code: true,
},
mangle: {
keep_fnames: true,
},
format: {
comments: false,
},
},
extractComments: false,
}),
],
},
plugins: [
new Webpack.ProvidePlugin({
process: 'process/browser',
}),
new Webpack.DefinePlugin({
__DEV__,
__PROFILE__: false,
// By importing `shared/` we may import ReactFeatureFlags
__EXPERIMENTAL__: true,
'process.env.DEVTOOLS_PACKAGE': `"react-devtools-extensions"`,
'process.env.DEVTOOLS_VERSION': `"${DEVTOOLS_VERSION}"`,
'process.env.GITHUB_URL': `"${GITHUB_URL}"`,
'process.env.IS_CHROME': IS_CHROME,
'process.env.IS_FIREFOX': IS_FIREFOX,
'process.env.IS_EDGE': IS_EDGE,
__IS_CHROME__: IS_CHROME,
__IS_FIREFOX__: IS_FIREFOX,
__IS_EDGE__: IS_EDGE,
__IS_NATIVE__: false,
__IS_INTERNAL_MCP_BUILD__: false,
}),
new Webpack.SourceMapDevToolPlugin({
filename: '[file].map',
noSources: !__DEV__,
// https://github.com/webpack/webpack/issues/3603#issuecomment-1743147144
moduleFilenameTemplate(info) {
const {absoluteResourcePath, namespace, resourcePath} = info;
if (isAbsolute(absoluteResourcePath)) {
return relative(__dirname + '/build', absoluteResourcePath);
}
// Mimic Webpack's default behavior:
return `webpack://${namespace}/${resourcePath}`;
},
}),
new SourceMapIgnoreListPlugin({
shouldIgnoreSource: () => !__DEV__,
}),
],
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
options: {
configFile: resolve(
__dirname,
'..',
'react-devtools-shared',
'babel.config.js',
),
},
},
],
},
};

View File

@ -66,6 +66,7 @@ module.exports = {
mode: __DEV__ ? 'development' : 'production', mode: __DEV__ ? 'development' : 'production',
devtool: false, devtool: false,
entry: { entry: {
backend: './src/backend.js',
background: './src/background/index.js', background: './src/background/index.js',
backendManager: './src/contentScripts/backendManager.js', backendManager: './src/contentScripts/backendManager.js',
fileFetcher: './src/contentScripts/fileFetcher.js', fileFetcher: './src/contentScripts/fileFetcher.js',
@ -79,7 +80,14 @@ module.exports = {
output: { output: {
path: __dirname + '/build', path: __dirname + '/build',
publicPath: '/build/', publicPath: '/build/',
filename: '[name].js', filename: chunkData => {
switch (chunkData.chunk.name) {
case 'backend':
return 'react_devtools_backend_compact.js';
default:
return '[name].js';
}
},
chunkFilename: '[name].chunk.js', chunkFilename: '[name].chunk.js',
}, },
node: { node: {
@ -141,7 +149,7 @@ module.exports = {
}), }),
new Webpack.SourceMapDevToolPlugin({ new Webpack.SourceMapDevToolPlugin({
filename: '[file].map', filename: '[file].map',
include: 'installHook.js', include: ['installHook.js', 'react_devtools_backend_compact.js'],
noSources: !__DEV__, noSources: !__DEV__,
// https://github.com/webpack/webpack/issues/3603#issuecomment-1743147144 // https://github.com/webpack/webpack/issues/3603#issuecomment-1743147144
moduleFilenameTemplate(info) { moduleFilenameTemplate(info) {
@ -163,6 +171,7 @@ module.exports = {
} }
const contentScriptNamesToIgnoreList = [ const contentScriptNamesToIgnoreList = [
'react_devtools_backend_compact',
// This is where we override console // This is where we override console
'installHook', 'installHook',
]; ];