TIL: Cloud Functions Node.js use ENV vars wrong way
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ự