Node.js 如何检测环境是使用Firebase云功能进行开发还是生产?
我如何检测我的服务器环境是使用Firebase云功能进行开发还是生产 我需要这样的东西:Node.js 如何检测环境是使用Firebase云功能进行开发还是生产?,node.js,firebase,google-cloud-functions,Node.js,Firebase,Google Cloud Functions,我如何检测我的服务器环境是使用Firebase云功能进行开发还是生产 我需要这样的东西: if(process.env.NODE_ENV === 'development'){ //DO STUFF SPECIFIC TO DEV ENVIRONMENT } else if(process.env.NODE_ENV === 'production'){ //DO STUFF SPECIFIC TO PRODUCTION ENVIRONMENT } 所有谷歌云项目都只是项目,
if(process.env.NODE_ENV === 'development'){
//DO STUFF SPECIFIC TO DEV ENVIRONMENT
}
else if(process.env.NODE_ENV === 'production'){
//DO STUFF SPECIFIC TO PRODUCTION ENVIRONMENT
}
所有谷歌云项目都只是项目,除了你如何指定它们的用途。因为云函数无法知道dev和prod之间的区别,所以您需要检查项目的名称,因为这是环境中唯一的变化。使用中的
process.env.GCLOUD\u项目
这里的其他答案似乎是假设这个问题是关于当地发展的,而事实并非如此。很容易检测代码是否在emulator中运行,但这无助于确定底层项目是否用于开发或生产(或其他目的)。在emulator中运行的某些代码很可能只对底层项目产生不必要的影响,这对指定为生产的项目来说是不好的。强烈建议针对不同的部署运行和隔离不同的项目,以便其中一个项目的更改不会影响另一个项目。process.env.FUNCTIONS\u
在firebase functions项目的process.env中,有一个名为functions\u EMULATOR的布尔变量,用于指示进程是在模拟器上运行还是在服务器上运行
这足以确定环境是开发环境还是生产环境
process.env.FUNCTIONS\u仿真器===true
Obs:在某些环境中,变量可能是字符串'true',而不是布尔值true,您可以依赖process.env
截至2020年7月28日和package.json
"dependencies": {
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.1"
},
如果您使用firebase启动应用程序
firebase模拟器:启动
然后,process.env
将具有如下属性
"FUNCTIONS_EMULATOR": "true",
"FIRESTORE_EMULATOR_HOST": "0.0.0.0:5002",
"PUBSUB_EMULATOR_HOST": "localhost:8085"
"FIREBASE_AUTH_EMULATOR_HOST": "0.0.0.0:9099"
"FUNCTIONS_EMULATOR": "true",
如果您使用firebase启动应用程序
firebase仿真器:启动--仅限函数
然后,process.env
将具有如下属性
"FUNCTIONS_EMULATOR": "true",
"FIRESTORE_EMULATOR_HOST": "0.0.0.0:5002",
"PUBSUB_EMULATOR_HOST": "localhost:8085"
"FIREBASE_AUTH_EMULATOR_HOST": "0.0.0.0:9099"
"FUNCTIONS_EMULATOR": "true",
用例
基于process.env,您可以编写firebase.function来预填充firestore模拟器(而不是生产firestore)
代码示例
Hmmm localhost的项目名称相同fyi@JimmyKane如果您想区分在云函数上运行还是在本地仿真器中运行,则这是另一个问题。最好的方法不是在Firebase中创建一个环境变量,例如
isProd
,并在每个环境中将其设置为正确的布尔值吗?@DougStevenson据说GCLOUD\u PROJECT
现在已被弃用。知道该使用什么吗?值得指出的是,问题是关于服务器环境,而不是本地模拟器。此答案仅适用于在本地使用仿真器时进行检测。这无助于确定正在使用哪个项目。emulator无法知道正在使用的项目是否指定用于开发、生产或其他用途。emulator甚至真正关心您想要使用哪个项目,因此仍然有可能犯错误,以不希望的方式影响项目。