Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何检测环境是使用Firebase云功能进行开发还是生产?_Node.js_Firebase_Google Cloud Functions - Fatal编程技术网

Node.js 如何检测环境是使用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 } 所有谷歌云项目都只是项目,

我如何检测我的服务器环境是使用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

}

所有谷歌云项目都只是项目,除了你如何指定它们的用途。因为云函数无法知道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甚至真正关心您想要使用哪个项目,因此仍然有可能犯错误,以不希望的方式影响项目。