mirror of
https://github.com/zebrajr/react.git
synced 2026-01-15 12:15:22 +00:00
## Summary - #26234 is reverted and replaced with a better approach - introduce a new global devtools variable to decouple the global hook's dependency on backend/console.js, and add it to react-devtools-inline and react-devtools-standalone With this PR, I want to introduce a new principle to hook.js: we should always be alert when editing this file and avoid importing from other files. In the past, we try to inline a lot of the implementation because we use `.toString()` to inject this function from the extension (we still have some old comments left). Although it is no longer inlined that way, it has became now more important to keep it clean as it is a de facto global API people are using (9.9K files contains it on Github search as of today). **File size change for extension:** Before: 379K installHook.js After: 21K installHook.js 363K renderer.js
163 lines
4.4 KiB
JavaScript
163 lines
4.4 KiB
JavaScript
'use strict';
|
|
|
|
const {resolve} = require('path');
|
|
const {DefinePlugin} = require('webpack');
|
|
const {
|
|
DARK_MODE_DIMMED_WARNING_COLOR,
|
|
DARK_MODE_DIMMED_ERROR_COLOR,
|
|
DARK_MODE_DIMMED_LOG_COLOR,
|
|
LIGHT_MODE_DIMMED_WARNING_COLOR,
|
|
LIGHT_MODE_DIMMED_ERROR_COLOR,
|
|
LIGHT_MODE_DIMMED_LOG_COLOR,
|
|
GITHUB_URL,
|
|
getVersionString,
|
|
} = require('./utils');
|
|
const {resolveFeatureFlags} = require('react-devtools-shared/buildUtils');
|
|
|
|
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 EDITOR_URL = process.env.EDITOR_URL || null;
|
|
const LOGGING_URL = process.env.LOGGING_URL || null;
|
|
|
|
const featureFlagTarget = process.env.FEATURE_FLAG_TARGET || 'extension-oss';
|
|
|
|
const babelOptions = {
|
|
configFile: resolve(
|
|
__dirname,
|
|
'..',
|
|
'react-devtools-shared',
|
|
'babel.config.js',
|
|
),
|
|
};
|
|
|
|
module.exports = {
|
|
mode: __DEV__ ? 'development' : 'production',
|
|
devtool: __DEV__ ? 'cheap-module-source-map' : false,
|
|
entry: {
|
|
background: './src/background.js',
|
|
main: './src/main.js',
|
|
panel: './src/panel.js',
|
|
proxy: './src/contentScripts/proxy.js',
|
|
prepareInjection: './src/contentScripts/prepareInjection.js',
|
|
renderer: './src/contentScripts/renderer.js',
|
|
installHook: './src/contentScripts/installHook.js',
|
|
},
|
|
output: {
|
|
path: __dirname + '/build',
|
|
publicPath: '/build/',
|
|
filename: '[name].js',
|
|
chunkFilename: '[name].chunk.js',
|
|
},
|
|
node: {
|
|
// Don't define a polyfill on window.setImmediate
|
|
setImmediate: false,
|
|
|
|
// source-maps package has a dependency on 'fs'
|
|
// but this build won't trigger that code path
|
|
fs: 'empty',
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
react: resolve(builtModulesDir, 'react'),
|
|
'react-debug-tools': resolve(builtModulesDir, 'react-debug-tools'),
|
|
'react-devtools-feature-flags': resolveFeatureFlags(featureFlagTarget),
|
|
'react-dom/client': resolve(builtModulesDir, 'react-dom/client'),
|
|
'react-dom': resolve(builtModulesDir, 'react-dom'),
|
|
'react-is': resolve(builtModulesDir, 'react-is'),
|
|
scheduler: resolve(builtModulesDir, 'scheduler'),
|
|
},
|
|
},
|
|
optimization: {
|
|
minimize: false,
|
|
},
|
|
plugins: [
|
|
new DefinePlugin({
|
|
__DEV__,
|
|
__EXPERIMENTAL__: true,
|
|
__EXTENSION__: true,
|
|
__PROFILE__: false,
|
|
__TEST__: NODE_ENV === 'test',
|
|
'process.env.DEVTOOLS_PACKAGE': `"react-devtools-extensions"`,
|
|
'process.env.DEVTOOLS_VERSION': `"${DEVTOOLS_VERSION}"`,
|
|
'process.env.EDITOR_URL': EDITOR_URL != null ? `"${EDITOR_URL}"` : null,
|
|
'process.env.GITHUB_URL': `"${GITHUB_URL}"`,
|
|
'process.env.LOGGING_URL': `"${LOGGING_URL}"`,
|
|
'process.env.NODE_ENV': `"${NODE_ENV}"`,
|
|
'process.env.DARK_MODE_DIMMED_WARNING_COLOR': `"${DARK_MODE_DIMMED_WARNING_COLOR}"`,
|
|
'process.env.DARK_MODE_DIMMED_ERROR_COLOR': `"${DARK_MODE_DIMMED_ERROR_COLOR}"`,
|
|
'process.env.DARK_MODE_DIMMED_LOG_COLOR': `"${DARK_MODE_DIMMED_LOG_COLOR}"`,
|
|
'process.env.LIGHT_MODE_DIMMED_WARNING_COLOR': `"${LIGHT_MODE_DIMMED_WARNING_COLOR}"`,
|
|
'process.env.LIGHT_MODE_DIMMED_ERROR_COLOR': `"${LIGHT_MODE_DIMMED_ERROR_COLOR}"`,
|
|
'process.env.LIGHT_MODE_DIMMED_LOG_COLOR': `"${LIGHT_MODE_DIMMED_LOG_COLOR}"`,
|
|
}),
|
|
],
|
|
module: {
|
|
defaultRules: [
|
|
{
|
|
type: 'javascript/auto',
|
|
resolve: {},
|
|
},
|
|
{
|
|
test: /\.json$/i,
|
|
type: 'json',
|
|
},
|
|
],
|
|
|
|
rules: [
|
|
{
|
|
test: /\.worker\.js$/,
|
|
use: [
|
|
{
|
|
loader: 'workerize-loader',
|
|
options: {
|
|
inline: true,
|
|
name: '[name]',
|
|
},
|
|
},
|
|
{
|
|
loader: 'babel-loader',
|
|
options: babelOptions,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
test: /\.js$/,
|
|
loader: 'babel-loader',
|
|
options: babelOptions,
|
|
},
|
|
{
|
|
test: /\.css$/,
|
|
use: [
|
|
{
|
|
loader: 'style-loader',
|
|
},
|
|
{
|
|
loader: 'css-loader',
|
|
options: {
|
|
sourceMap: true,
|
|
modules: true,
|
|
localIdentName: '[local]___[hash:base64:5]',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
};
|