如何在Google App Script中安装并使用Firebase SDK v9?
我尝试在Google App Script(GAS)应用中使用Firebase SDK。官方文档要求执行npm install firebase命令安装,但该操作无法在GAS中完成。
于是我尝试以下代码:
// Import the functions you need from the SDKs you need import { initializeApp } from "firebase/app"; import { getAnalytics } from "firebase/analytics"; // TODO: Add SDKs for Firebase products that you want to use // https://firebase.google.com/docs/web/setup#available-libraries // Your web app's Firebase configuration // For Firebase JS SDK v7.20.0 and later, measurementId is optional const firebaseConfig = { apiKey: "***", authDomain: "myapp.firebaseapp.com", databaseURL: "https://myapp-default-rtdb.europe-west1.firebasedatabase.app", projectId: "myappurl", storageBucket: "myappurl.appspot.com", messagingSenderId: "267227785525", appId: "***", measurementId: "G-K5CP51FRXR" }; // Initialize Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app);
但运行时出现错误:
SyntaxError: Cannot use import statement outside a module linea:
看起来是未将其声明为模块。我查找了相关教程,但仅找到针对Node.js的内容,没有关于Google App Script的指引。备注:我已安装FirebaseApp库。
请问如何实现需求?是否可以在GAS中使用Firebase SDK v9?
1. 直接使用已安装的FirebaseApp库(推荐)
既然已安装FirebaseApp库,这是GAS对接Firebase最官方、稳定的方式,完全不需要用Firebase SDK v9的语法。示例代码如下:
// 初始化Firebase应用 const firebaseApp = FirebaseApp.initializeApp({ apiKey: "***", authDomain: "myapp.firebaseapp.com", databaseURL: "https://myapp-default-rtdb.europe-west1.firebasedatabase.app", projectId: "myappurl", storageBucket: "myappurl.appspot.com", messagingSenderId: "267227785525", appId: "***" }); // 示例:读取实时数据库数据 const db = firebaseApp.getDatabase(); const data = db.getData("/path/to/data"); console.log(data); // 示例:写入实时数据库数据 db.setData("/path/to/data", { key: "value" });
这个库封装了Firebase常用功能(实时数据库、存储、认证等),完全适配GAS运行环境,无需处理模块导入问题。
2. 若非要使用Firebase SDK v9(不推荐)
GAS不支持ES模块的import语法,也无法直接安装npm包,但可以通过导入Firebase的UMD版本脚本来使用SDK v9,步骤如下:
- 打开GAS编辑器,点击「资源」→「库」,移除已有的FirebaseApp库(避免冲突)
- 点击「文件」→「新建」→「HTML文件」,命名为
firebase-sdk,粘贴Firebase UMD版本的脚本内容(可从Firebase官网获取最新UMD链接的压缩代码) - 在主脚本中通过
HtmlService加载该HTML文件引入SDK:
function loadFirebaseSDK() { const html = HtmlService.createHtmlOutputFromFile('firebase-sdk').getContent(); // SDK已挂载到全局对象 const { initializeApp } = firebase; const firebaseConfig = { // 你的配置信息 }; const app = initializeApp(firebaseConfig); // 注意:GAS运行在服务器端,无法使用Analytics(依赖浏览器环境) }
⚠️ 限制说明:这种方法存在诸多局限,比如Firebase的Analytics、前端Auth流程等功能依赖浏览器环境,在GAS服务器端运行会失效,且维护成本远高于官方FirebaseApp库。
总结
不建议在GAS中使用Firebase SDK v9,直接用已安装的FirebaseApp库是最优解,它专门针对GAS环境设计,能覆盖绝大多数Firebase操作需求。
内容的提问来源于stack exchange,提问作者LeSmoox

