You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js脚本中获取当前选中的Firebase项目?

问题

在CMD终端中,运行firebase projects:list可查看当前选中的项目,示例输出如下:

┌──────────────────────┬──────────────────────┬────────────────┬──────────────────────┐
│ Project Display Name │ Project ID           │ Project Number │ Resource Location ID │
├──────────────────────┼──────────────────────┼────────────────┼──────────────────────┤
│ Canvassing           │ canvassing-xx        │ xx             │ us-west1             │
│ EC1                  │ engage-xx            │ xx             │ us-central           │
├──────────────────────┼──────────────────────┼────────────────┼──────────────────────┤
│ PVBC                 │ pvbc-xx    (current) │ xx             │ us-west1            

此时pvbc-xx为当前活跃项目。

我有两类Node.js代码场景:

  1. 部署到Firebase的云函数,通过firebase deploy部署到当前选中项目:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
firestore = admin.firestore();

exports.updateState = functions.pubsub.schedule('every 1 minutes').onRun((context) => {
  return bloc.updateActivityState(firestore);
});
  1. 本地命令行操作脚本,目前需手动指定项目配置文件路径:
var fc = require('../firebase_project1_name/config/firebaseConfig.js');
var firebaseConfig = fc.firebaseConfig;
var app = firebase.initializeApp(firebaseConfig);
var db = firebase.firestore(app);
var colDistrict = db.collection('districts');
...

需求:在同一终端运行Node.js脚本时,自动获取当前通过firebase use选中的项目ID,实现动态加载对应配置;更理想的是无需存储配置文件,直接通过firebase-admin获取项目信息。

解决方案

方法1:通过firebase-tools获取当前项目ID

直接调用Firebase CLI的Node.js API获取当前项目,无需解析终端输出:

  1. 安装依赖:
npm install firebase-tools --save-dev
  1. 脚本中调用API:
const firebaseTools = require('firebase-tools');

async function getCurrentFirebaseProject() {
  try {
    const projectConfig = await firebaseTools.use.get();
    return projectConfig.project; // 返回当前项目ID
  } catch (error) {
    console.error('获取当前项目失败:', error);
    return null;
  }
}

// 动态加载配置示例
getCurrentFirebaseProject().then(projectId => {
  if (projectId) {
    const fc = require(`../${projectId}/config/firebaseConfig.js`);
    const firebaseConfig = fc.firebaseConfig;
    // 执行初始化等后续操作
  }
});

方法2:firebase-admin自动关联当前项目(无需手动配置)

若本地已完成firebase login认证,且通过firebase use选中目标项目,firebase-admin可自动使用当前项目的默认凭证,无需手动传入配置文件:

const admin = require('firebase-admin');

// 自动关联当前选中项目的凭证,无需传入firebaseConfig
admin.initializeApp();

const db = admin.firestore();
const colDistrict = db.collection('districts');
// 执行后续数据库操作

前置条件:

  • 本地已安装Firebase CLI并完成firebase login
  • 已通过firebase use <project-id>选中目标项目
  • 脚本运行环境有权限访问该项目(本地开发环境默认满足,服务器环境需配置GOOGLE_APPLICATION_CREDENTIALS环境变量)

方法3:解析firebase projects:list的JSON输出

若不想依赖firebase-tools包,可在脚本中执行命令并解析JSON格式输出:

const { exec } = require('child_process');

function getCurrentFirebaseProject() {
  return new Promise((resolve, reject) => {
    exec('firebase projects:list --json', (error, stdout, stderr) => {
      if (error) {
        reject(error);
        return;
      }
      const projectsData = JSON.parse(stdout);
      const currentProject = projectsData.projects.find(project => project.current);
      resolve(currentProject ? currentProject.projectId : null);
    });
  });
}

// 使用示例
getCurrentFirebaseProject().then(projectId => {
  // 动态加载配置或初始化admin
});

内容的提问来源于stack exchange,提问作者david weng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:25:27