Как получить файл config. js в качестве внешнего (необходим во время выполнения, а не в комплекте) в веб-пакете. - PullRequest
0 голосов
/ 21 января 2020

Я разработал приложение, используя Create React App. У меня есть config.js в моей папке public. Я пытаюсь использовать его как внешний файл в webpack.config.js, чтобы после его построения я мог изменить значения в моем config.js, и они отразятся в моем приложении на refre sh. Но он собирается, когда я строю свой проект.

Я использую react-app-rewired, чтобы переопределить мой CRA webpack.config.js.

Вот мой config-overrides.js:

module.exports = function override(config, env) {
  const isEnvProduction = env === 'production';
  const isEnvDevelopment = env === 'development';

  //do stuff with the webpack config...
    config.plugins.push(
      new WrapperPlugin({
        test: /\.js$/, // only wrap output of bundle files with '.js' extension 
        footer: '\n \n// build: '+commitDate+' '+commitHash
      }),
    );

    config.optimization= {
      minimize: true,
      minimizer: [
          new TerserPlugin({
              terserOptions: {
                  output: {
                      comments: /build/,
                  },
                  compress: {
                    // drop_console: isEnvProduction,
                  },
              },
              extractComments: true,
          }),
      ],
    };

    config.externals = {
      'config': JSON.stringify(require('./public/config')),
    }

    config.output.filename = isEnvProduction ? 'static/js/build.js' : isEnvDevelopment && 'static/js/build.js';
    config.output.chunkFilename = isEnvProduction ? 'static/js/build.chunk.js' : isEnvDevelopment && 'static/js/build.chunk.js';
    return config;

Вот мой config.js:

module.exports = {
    sideBar: {
        showGroupsOption : true,
    },
    calendar: {
        showOthersBookings: true,
        showOthersBookingDetails: false
    }
}

Я импортирую файл, используя import config from 'config'; в моих компонентах , Это прекрасно работает.

Когда я запускаю npm run build, запускается react-app-rewired build, и файл config.js связывается вместе со сборкой и не требуется во время выполнения. (Я попытался изменить значения в конфигурации. js, и они не отражаются в моем приложении на refre sh).

Что я делаю не так?

А также, когда Я делаю сборку, мой файл config.js будет присутствовать в моей папке сборки (build/config.js). Поэтому, когда я пытаюсь изменить свой config-overrides.js на

config.externals = {
      'config': isEnvProduction ? JSON.stringify(require('./config')) : JSON.stringify(require('./public/config')),
    }

и пытаюсь его построить, происходит сбой, потому что ./config не существует. Как мне изменить его, чтобы он ссылался на build/config.js (эта папка сборки не будет существовать, пока я не сделаю сборку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...