Сравнение строк не работает в Javascript при сравнении переменной окружения с константой - PullRequest
0 голосов
/ 20 ноября 2018

У нас есть простое приложение 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"));

Так что я предполагаю, что это означает, что сравнение выполняется во время сборки (и поскольку это константа, это имеет смысл).

1 Ответ

0 голосов
/ 31 января 2019

Решение было передано в stringify, как показано ниже:

JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")

Таким образом, мы могли бы привести обе переменные в один и тот же строковый формат, обе имеют одинаковую длину и оба имеют одинаковое значение,но переменные среды, внедренные в Azure Process, не совпадают.

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