1. const {resolve} = require('path');
    
  2. const Webpack = require('webpack');
    
  3. const {
    
  4.   DARK_MODE_DIMMED_WARNING_COLOR,
    
  5.   DARK_MODE_DIMMED_ERROR_COLOR,
    
  6.   DARK_MODE_DIMMED_LOG_COLOR,
    
  7.   LIGHT_MODE_DIMMED_WARNING_COLOR,
    
  8.   LIGHT_MODE_DIMMED_ERROR_COLOR,
    
  9.   LIGHT_MODE_DIMMED_LOG_COLOR,
    
  10.   GITHUB_URL,
    
  11.   getVersionString,
    
  12. } = require('react-devtools-extensions/utils');
    
  13. const {resolveFeatureFlags} = require('react-devtools-shared/buildUtils');
    
  14. 
    
  15. const NODE_ENV = process.env.NODE_ENV;
    
  16. if (!NODE_ENV) {
    
  17.   console.error('NODE_ENV not set');
    
  18.   process.exit(1);
    
  19. }
    
  20. 
    
  21. const __DEV__ = NODE_ENV === 'development';
    
  22. 
    
  23. const EDITOR_URL = process.env.EDITOR_URL || null;
    
  24. 
    
  25. const DEVTOOLS_VERSION = getVersionString();
    
  26. 
    
  27. const babelOptions = {
    
  28.   configFile: resolve(
    
  29.     __dirname,
    
  30.     '..',
    
  31.     'react-devtools-shared',
    
  32.     'babel.config.js',
    
  33.   ),
    
  34. };
    
  35. 
    
  36. module.exports = {
    
  37.   mode: __DEV__ ? 'development' : 'production',
    
  38.   devtool: __DEV__ ? 'eval-cheap-source-map' : 'source-map',
    
  39.   entry: {
    
  40.     backend: './src/backend.js',
    
  41.     frontend: './src/frontend.js',
    
  42.     hookNames: './src/hookNames.js',
    
  43.   },
    
  44.   output: {
    
  45.     path: __dirname + '/dist',
    
  46.     publicPath: '/dist/',
    
  47.     filename: '[name].js',
    
  48.     chunkFilename: '[name].chunk.js',
    
  49.     library: {
    
  50.       type: 'commonjs2',
    
  51.     },
    
  52.   },
    
  53.   externals: {
    
  54.     react: 'react',
    
  55.     'react-dom': 'react-dom',
    
  56.     'react-dom/client': 'react-dom/client',
    
  57.     'react-is': 'react-is',
    
  58.     scheduler: 'scheduler',
    
  59.   },
    
  60.   node: {
    
  61.     global: false,
    
  62.   },
    
  63.   resolve: {
    
  64.     alias: {
    
  65.       'react-devtools-feature-flags': resolveFeatureFlags('inline'),
    
  66.     },
    
  67.   },
    
  68.   optimization: {
    
  69.     minimize: false,
    
  70.   },
    
  71.   plugins: [
    
  72.     new Webpack.ProvidePlugin({
    
  73.       process: 'process/browser',
    
  74.       Buffer: ['buffer', 'Buffer'],
    
  75.     }),
    
  76.     new Webpack.DefinePlugin({
    
  77.       __DEV__,
    
  78.       __EXPERIMENTAL__: true,
    
  79.       __EXTENSION__: false,
    
  80.       __PROFILE__: false,
    
  81.       __TEST__: NODE_ENV === 'test',
    
  82.       'process.env.DEVTOOLS_PACKAGE': `"react-devtools-inline"`,
    
  83.       'process.env.DEVTOOLS_VERSION': `"${DEVTOOLS_VERSION}"`,
    
  84.       'process.env.EDITOR_URL': EDITOR_URL != null ? `"${EDITOR_URL}"` : null,
    
  85.       'process.env.GITHUB_URL': `"${GITHUB_URL}"`,
    
  86.       'process.env.NODE_ENV': `"${NODE_ENV}"`,
    
  87.       'process.env.DARK_MODE_DIMMED_WARNING_COLOR': `"${DARK_MODE_DIMMED_WARNING_COLOR}"`,
    
  88.       'process.env.DARK_MODE_DIMMED_ERROR_COLOR': `"${DARK_MODE_DIMMED_ERROR_COLOR}"`,
    
  89.       'process.env.DARK_MODE_DIMMED_LOG_COLOR': `"${DARK_MODE_DIMMED_LOG_COLOR}"`,
    
  90.       'process.env.LIGHT_MODE_DIMMED_WARNING_COLOR': `"${LIGHT_MODE_DIMMED_WARNING_COLOR}"`,
    
  91.       'process.env.LIGHT_MODE_DIMMED_ERROR_COLOR': `"${LIGHT_MODE_DIMMED_ERROR_COLOR}"`,
    
  92.       'process.env.LIGHT_MODE_DIMMED_LOG_COLOR': `"${LIGHT_MODE_DIMMED_LOG_COLOR}"`,
    
  93.     }),
    
  94.   ],
    
  95.   module: {
    
  96.     rules: [
    
  97.       {
    
  98.         test: /\.worker\.js$/,
    
  99.         use: [
    
  100.           {
    
  101.             loader: 'workerize-loader',
    
  102.             options: {
    
  103.               inline: true,
    
  104.               name: '[name]',
    
  105.             },
    
  106.           },
    
  107.           {
    
  108.             loader: 'babel-loader',
    
  109.             options: babelOptions,
    
  110.           },
    
  111.         ],
    
  112.       },
    
  113.       {
    
  114.         test: /\.js$/,
    
  115.         loader: 'babel-loader',
    
  116.         options: babelOptions,
    
  117.       },
    
  118.       {
    
  119.         test: /\.css$/,
    
  120.         use: [
    
  121.           {
    
  122.             loader: 'style-loader',
    
  123.           },
    
  124.           {
    
  125.             loader: 'css-loader',
    
  126.             options: {
    
  127.               sourceMap: __DEV__,
    
  128.               modules: true,
    
  129.               localIdentName: '[local]___[hash:base64:5]',
    
  130.             },
    
  131.           },
    
  132.         ],
    
  133.       },
    
  134.     ],
    
  135.   },
    
  136. };