如何使用Firebase Cloud Functions检测我的服务器环境是开发环境还是生产环境?
我需要这样的东西:
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
}
答案 0 :(得分:14)
在 process.env 的firebase函数项目上,有一个名为 FUNCTIONS_EMULATOR 的布尔变量,它指示进程是在模拟器上还是在服务器上运行。 / p>
这足以确定环境是开发环境还是生产环境。
process.env.FUNCTIONS_EMULATOR === true
obs:在某些环境中,变量可能是字符串'true'而不是布尔值 true
答案 1 :(得分:8)
process.env
截至2020年7月28日和package.json
"dependencies": {
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.1"
},
如果您使用Firebase启动应用程序
firebase emulators:start
然后process.env
将具有类似
"FUNCTIONS_EMULATOR": "true",
"FIRESTORE_EMULATOR_HOST": "0.0.0.0:5002",
"PUBSUB_EMULATOR_HOST": "localhost:8085"
如果您使用Firebase启动应用程序
firebase emulators:start --only functions
然后process.env
将具有类似
"FUNCTIONS_EMULATOR": "true",
基于process.env,您可以编写firebase.function来预填充您的Firestore模拟器(而非生产Firestore)!
export const prepopulateFirestoreEmulator = functions.https.onRequest(
(request, response) => {
if (process.env.FUNCTIONS_EMULATOR && process.env.FIRESTORE_EMULATOR_HOST) {
// TODO: prepopulate firestore emulator from 'yourproject/src/sample_data.json
response.send('Prepopulated firestore with sample_data.json!');
} else {
response.send(
"Do not populate production firestore with sample_data.json"
);
}
}
);
答案 2 :(得分:2)
所有项目都是项目,除了您指定目的的方式。由于Cloud Functions无法了解开发和生产之间的区别,因此您需要检查项目的名称,因为这是环境中唯一发生变化的事情。使用automatically populated env vars中的process.env.GCLOUD_PROJECT
。