У нас есть простое приложение React, созданное с помощью CRA 1.x.
Мы установили dotenv
для использования переменных окружения в проекте, и наши переменные включены в файлы .env
и .env.development
как это:
.env
REACT_APP_LOGGER=LOGGER
.env.development
REACT_APP_LOGGER=NO_LOGGER
Тогда в коде мыимеют следующую логику:
if(process.env.REACT_APP_LOGGER === "LOGGER") {
// do something
}
На локальных сборках с webpack 4 в режиме development
if - true, а в режиме production
- false.
Но на лазурном, в обоихслучаи ложно
process.env.REACT_APP_LOGGER === "LOGGER" // false
Мы проверили значение process.env.REACT_APP_LOGGER
, и это тип "LOGGER" string
, но код возвращает странные значения:
console.log(process.env.REACT_APP_LOGGER)
console.log(process.env.REACT_APP_LOGGER === "LOGGER")
console.log(process.env.REACT_APP_LOGGER == "LOGGER")
console.log(typeof process.env.REACT_APP_LOGGER)
Этовыводится с помощью предыдущего кода:
LOGGER
false
false
string
Что-то я не так делаю?Странная часть в том, что у нас есть другие сравнения строк, подобные этому, и они сравниваются правильно.
process.env.NODE_ENV === "production" // true
РЕДАКТИРОВАТЬ: Когда мы смотрим на переданный код, мы видим следующее:
console.log("LOGGER"),
console.log(!1),
console.log(!1),
console.log(f("LOGGER"));
Так что я предполагаю, что это означает, что сравнение выполняется во время сборки (и поскольку это константа, это имеет смысл).