TIL: Cloud Functions Node.js use ENV vars wrong way

Newsletter May 8, 2022

TL;DR

  • Khi deploy Firebase sẽ check xem các dependencies, code outside functions (global scope) có chạy được hay không?
  • Trong quá trình deploy Firebase sẽ không export environment variables dẫn tới các code có xử lý env ở global scope có thể bị lỗi.
  • Xử lý bằng cách check các code ở global scope động đến env vars cần check điều kiện undefined.

Mình gặp phải case này khá dị với biến môi trường (environment variables) khi làm việc với Cloud Functions.

Khởi tạo môi trường

Firebase cho phép chạy emulators dưới local, nên mình sẽ khởi tạo file env

firebase functions:config:export

Mình cần set env var dạng json như bên dưới vào file .env.local

CONFIG='{"version":1.2,"link":{"github":"https://github.com/toanalien"}}'

Sau đó load env này lên và trả ra http response

const functions = require("firebase-functions");
const config = JSON.parse(process.env.CONFIG);

exports.testEnv = functions.https.onRequest((request, response) => {
    response.send(config);
});

Expect là khi gọi vào endpoint /testEnv sẽ trả về json config. NHƯNG KHÔNG, functions không start được

Nguyên nhân: khi Firebase deploy không load env dẫn đến lỗi ở function JSON.parse. Thử thay đổi dòng code đổi line 2 → line 5

functions chạy được

hoặc có thể đổi thành như này kết quả tương tự

Tags