我们有一个简单的React应用程序,用CRA1.X创建。
我们安装
dotenv
在项目中使用环境变量,我们的变量包含在
.env
和
.env.development
像这样的文件:
Env
REACT_APP_LOGGER=LOGGER
.环境发展
REACT_APP_LOGGER=NO_LOGGER
在代码中,我们有这样的逻辑:
if(process.env.REACT_APP_LOGGER === "LOGGER") {
// do something
}
在本地版本上使用Webpack4
development
如果设置为真,则打开
production
模式是错误的。
但在Azure上,这两种情况都是错误的
process.env.REACT_APP_LOGGER === "LOGGER" // false
我们已经检查了
process.env.REACT_APP_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"));
所以我想这意味着比较是在构建期间完成的(因为这是一个常数,所以它是有意义的)。