我们有一个使用CRA 1.x创建的简单React应用程序。
我们安装dotenv
了在项目上使用环境变量的程序,并且我们的变量包含在.env
和.env.development
文件中,如下所示:
.env
REACT_APP_LOGGER=LOGGER
.env。发展
REACT_APP_LOGGER=NO_LOGGER
然后在代码中,我们具有以下逻辑:
if(process.env.REACT_APP_LOGGER === "LOGGER") {
// do something
}
在development
模式为webpack 4的本地版本中,if为true,而onproduction
模式为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"));
所以我想这意味着比较是在构建期间完成的(因为这是一个常数,所以很有意义)。
解决方案是通过两个都进行字符串化,如下所示:
JSON.stringify(process.env.REACT_APP_LOGGER) === JSON.stringify("LOGGER")
通过这种方式,我们可以将两个变量转换为相同的字符串格式,都具有相同的长度,并且都具有相同的值,但是Azure Process注入的环境变量并不相同。
就我而言,它仍然没有用,因为战争结束时有一个尾随的空间。
set NODE_ENV=develop &&
然后我使用了另一个命令。也许它将帮助某人进行调试,因为在console.log中未显示尾随空格通过提供有关尾随空格的提示,您为我节省了很多时间@ExceptionalNullPointer。
NODE_ENV=develop && node app.js
不为我工作。但NODE_ENV=develop& node app.js
正在工作。