Как я могу использовать переменные среды, определенные в .bash_profile
в приложении React? У меня есть два приложения React на производстве (они - один и тот же проект, поэтому они имеют одинаковый код), но им нужно запросить разные хосты API, и я решил, что переменные env могут сделать трюк.
React: Использовать переменные среды
Ответ 1
Используйте webpack.DefinePlugin
. Предположим, что вы экспортировали FOO
и BAR
в свой .bash_profile
, тогда ваш файл webpackconfig должен выглядеть так:
const config = {
entry: 'somescript',
// ...
module: {
// ...
},
// ...
plugins: [
// ... your plugins
new webpack.DefinePlugin({
'process.env':{
'FOO': process.env.FOO,
'BAR': process.env.BAR
}
})
],
// ...
}
Вы сможете получить доступ к тем из ваших js во время компиляции через process.env.FOO
и process.env.BAR
Ответ 2
Храните переменные среды в index.html
!
если вы рассматриваете index.html
как манифест развертывания, который содержит значения, специфичные для среды, вы можете использовать одни и те же активы с версией (js, css) в каждой среде!
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="shortcut icon" href="#" onclick="location.href='https://assets.myapp.com/favicon.ico'; return false;">
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<link rel="manifest" href="#" onclick="location.href='https://assets.myapp.com/manifest.json'; return false;">
<title>React App</title>
<script>
env = {
// Add your environment variables here
api: "https://staging-api.myapp.com"
};
</script>
<link href="#" onclick="location.href='https://assets.myapp.com/static/css/main.6bd13355.chunk.css'; return false;" rel="stylesheet">
</head>
<body>
<div id="root"></div>
<script src="https://assets.myapp.com/static/js/1.a700ff87.chunk.js"></script>
<script src="https://assets.myapp.com/static/js/main.3ec5cdc6.chunk.js"></script>
</body>
</html>
В вашей ссылке на код значения непосредственно: myApi = window.env.api;
Подробнее об этой методологии читайте на странице https://immutablewebapps.org