Показать сообщение отдельно
  #1 (permalink)  
Старый 22.09.2020, 08:10
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 50

Передача данных из Вебпака в Реакт
Здравствуйте. Есть приложение на Реакте в которое мне нужно передать режим работы: разработка или публикация.

В package.json есть две команды для запуска Вебпака. В каждую через переменные окружения передаётся режим.

package.json
"scripts": {
  "dev": "webpack-dev-server --env.mode=development",
  "build": "webpack          --env.mode=production"
}


В файле с настройками Вебпака переданный режим можно получить через env.mode.

webpack.config.js
module.exports = function(env) {
    return {
        mode: env.mode,
        entry: ...,
        output: ...,
        plugins: [],
    }
}


Как теперь этот режим передать Реакту? За несколько часов поисков мне удалось только найти способ передать в массив plugins вызов new webpack.DefinePlugin(), туда нужно передать объект, в объекте свойство 'process.env', а там будет объект. В этот объект можно передать любые названия свойств, но значения можно будет брать только если они присутствуют в process.env файла с настройками Вебпака.

webpack.config.js
module.exports = function(env) {
    return {
        mode: env.mode,
        entry: ...,
        output: ...,
        plugins: [
			new webpack.DefinePlugin(
	            {
	                'process.env': {
	                    'MODE': JSON.stringify(process.env.npm_package_scripts_build)
	                }
	            }
	        )
        ],
    }
}


Теперь в любом файле Реакта я, если обращусь к process.env, получу объект
{ MODE: "webpack --env.mode=production" }

Отсюда можно получить строку с режимом. Но всё это выглядит дико. Я не могу просто передать строку типа
new webpack.DefinePlugin(
    {
        'process.env': {
            'MODE': 'development'
        }
    }
)

Это не сработает. Как и другие способы найденные в Сети. Если ли нормальный прямолинейный способ отправки данных из Вебпака в Реакт?
Ответить с цитированием