了解express应用程序是否作为firebase云功能运行



我有一个express应用程序,我想在我的机器中作为独立服务器在本地运行,但是,当将其部署到firebase云功能时,我需要将其设置为云功能。

有没有一种可靠的方法可以在不手动设置env变量的情况下知道应用程序在哪个环境中运行,或者最佳做法是什么?

例如:

if(isRunningInFirebase()){
exports.myFun=functions.https.onRequest(app)
} else app.listen(3030)

Firebase现在在运行模拟器时设置FUNCTIONS_EMULATOR环境变量:

if (process.env.FUNCTIONS_EMULATOR === 'true') {
functions are on localhost
} else {
functions are on Firebase
}

如本文所述,函数运行时和本地模拟函数中会自动填充一些环境变量。例如,其中一个是GCLOUD_PROJECT变量,它被设置为您的Firebase项目ID。您可以让您的应用程序像这样检查它:

if(process.env.GCLOUD_PROJECT) { 
// running in Firebase environment 
}
else { 
// running somewhere else 
}

我通过记录进程进行了一些探索。env

当使用firebase函数在本地运行函数时:shell或firebase serve-only函数会有一堆本地机器类型的节点变量。

当运行位于Firebase Cloud Functions中的已部署函数时。有一个新的节点环境变量在本地运行时没有设置:

NODE_ENV: 'production'

所以使用它:

if (process.env.NODE_ENV === 'production') { 
// running in production cloud environment 
} else { 
// running locally (shell or serve) 
}

在本地或谷歌电脑上远程运行程序之前不必编辑程序,可以节省大量时间。

对象process.env在本地和云中运行时都被断言。它有很大的不同,但我认为这是一个可靠、易于理解和使用的属性。

这个独立的代码说明它在哪里,并将变量端口设置为我在这两种情况下使用的常用数字。

// Dan K The program wants to know, where am I ?
'use strict'
console.log( "program ID: " + "zincoNoDogs13" );
// Make a message and set a port number for other uses depending on whether the
// program wakes up on a local computer or in google cloud
const functions = require( 'firebase-functions' );
const express = require('express');
const app = express();
exports.api = functions.https.onRequest( app );
var port;
var imaThis = "local";
let lookie = process.env.HOME;
if( lookie == "/tmp" ) { imaThis = "cloud"; }
if( imaThis == "local" ) {console.log( "I am on a local computer" ); port = 3000; }
if( imaThis == "cloud" ) {console.log( "I am in the clouds man" ); port = 80; }
console.log( "Port number is going to be: " + port );

你得到了一个或另一个,或者好吧,我无论如何都会得到:

程序ID:zincoNoDogs13我在云端端口号将是:80

程序ID:zincoNoDogs13我在本地计算机上端口号将是:3000

相关内容

  • 没有找到相关文章

最新更新