1. 'use strict';
    
  2. 
    
  3. const {resolve} = require('path');
    
  4. const Webpack = require('webpack');
    
  5. const DevToolsIgnorePlugin = require('devtools-ignore-webpack-plugin');
    
  6. 
    
  7. const {resolveFeatureFlags} = require('react-devtools-shared/buildUtils');
    
  8. const {
    
  9.   DARK_MODE_DIMMED_WARNING_COLOR,
    
  10.   DARK_MODE_DIMMED_ERROR_COLOR,
    
  11.   DARK_MODE_DIMMED_LOG_COLOR,
    
  12.   LIGHT_MODE_DIMMED_WARNING_COLOR,
    
  13.   LIGHT_MODE_DIMMED_ERROR_COLOR,
    
  14.   LIGHT_MODE_DIMMED_LOG_COLOR,
    
  15.   GITHUB_URL,
    
  16.   getVersionString,
    
  17. } = require('./utils');
    
  18. 
    
  19. const NODE_ENV = process.env.NODE_ENV;
    
  20. if (!NODE_ENV) {
    
  21.   console.error('NODE_ENV not set');
    
  22.   process.exit(1);
    
  23. }
    
  24. 
    
  25. const builtModulesDir = resolve(
    
  26.   __dirname,
    
  27.   '..',
    
  28.   '..',
    
  29.   'build',
    
  30.   'oss-experimental',
    
  31. );
    
  32. 
    
  33. const __DEV__ = NODE_ENV === 'development';
    
  34. 
    
  35. const DEVTOOLS_VERSION = getVersionString(process.env.DEVTOOLS_VERSION);
    
  36. 
    
  37. const IS_CHROME = process.env.IS_CHROME === 'true';
    
  38. const IS_FIREFOX = process.env.IS_FIREFOX === 'true';
    
  39. const IS_EDGE = process.env.IS_EDGE === 'true';
    
  40. 
    
  41. const featureFlagTarget = process.env.FEATURE_FLAG_TARGET || 'extension-oss';
    
  42. 
    
  43. module.exports = {
    
  44.   mode: __DEV__ ? 'development' : 'production',
    
  45.   devtool: __DEV__ ? 'cheap-module-source-map' : 'nosources-cheap-source-map',
    
  46.   entry: {
    
  47.     backend: './src/backend.js',
    
  48.   },
    
  49.   output: {
    
  50.     path: __dirname + '/build',
    
  51.     filename: 'react_devtools_backend_compact.js',
    
  52.   },
    
  53.   node: {
    
  54.     global: false,
    
  55.   },
    
  56.   resolve: {
    
  57.     alias: {
    
  58.       react: resolve(builtModulesDir, 'react'),
    
  59.       'react-debug-tools': resolve(builtModulesDir, 'react-debug-tools'),
    
  60.       'react-devtools-feature-flags': resolveFeatureFlags(featureFlagTarget),
    
  61.       'react-dom': resolve(builtModulesDir, 'react-dom'),
    
  62.       'react-is': resolve(builtModulesDir, 'react-is'),
    
  63.       scheduler: resolve(builtModulesDir, 'scheduler'),
    
  64.     },
    
  65.   },
    
  66.   optimization: {
    
  67.     minimize: false,
    
  68.   },
    
  69.   plugins: [
    
  70.     new Webpack.ProvidePlugin({
    
  71.       process: 'process/browser',
    
  72.     }),
    
  73.     new Webpack.DefinePlugin({
    
  74.       __DEV__: true,
    
  75.       __PROFILE__: false,
    
  76.       __DEV____DEV__: true,
    
  77.       'process.env.DEVTOOLS_PACKAGE': `"react-devtools-extensions"`,
    
  78.       'process.env.DEVTOOLS_VERSION': `"${DEVTOOLS_VERSION}"`,
    
  79.       'process.env.GITHUB_URL': `"${GITHUB_URL}"`,
    
  80.       'process.env.DARK_MODE_DIMMED_WARNING_COLOR': `"${DARK_MODE_DIMMED_WARNING_COLOR}"`,
    
  81.       'process.env.DARK_MODE_DIMMED_ERROR_COLOR': `"${DARK_MODE_DIMMED_ERROR_COLOR}"`,
    
  82.       'process.env.DARK_MODE_DIMMED_LOG_COLOR': `"${DARK_MODE_DIMMED_LOG_COLOR}"`,
    
  83.       'process.env.LIGHT_MODE_DIMMED_WARNING_COLOR': `"${LIGHT_MODE_DIMMED_WARNING_COLOR}"`,
    
  84.       'process.env.LIGHT_MODE_DIMMED_ERROR_COLOR': `"${LIGHT_MODE_DIMMED_ERROR_COLOR}"`,
    
  85.       'process.env.LIGHT_MODE_DIMMED_LOG_COLOR': `"${LIGHT_MODE_DIMMED_LOG_COLOR}"`,
    
  86.       'process.env.IS_CHROME': IS_CHROME,
    
  87.       'process.env.IS_FIREFOX': IS_FIREFOX,
    
  88.       'process.env.IS_EDGE': IS_EDGE,
    
  89.     }),
    
  90.     new DevToolsIgnorePlugin({
    
  91.       shouldIgnorePath: function (path) {
    
  92.         if (!__DEV__) {
    
  93.           return true;
    
  94.         }
    
  95. 
    
  96.         return path.includes('/node_modules/') || path.includes('/webpack/');
    
  97.       },
    
  98.     }),
    
  99.   ],
    
  100.   module: {
    
  101.     rules: [
    
  102.       {
    
  103.         test: /\.js$/,
    
  104.         loader: 'babel-loader',
    
  105.         options: {
    
  106.           configFile: resolve(
    
  107.             __dirname,
    
  108.             '..',
    
  109.             'react-devtools-shared',
    
  110.             'babel.config.js',
    
  111.           ),
    
  112.         },
    
  113.       },
    
  114.     ],
    
  115.   },
    
  116. };