# #firebase #npm #cypress #vite #sveltekit
Вопрос:
Я пытаюсь настроить свой проект sveltekit таким образом, чтобы мой SDK firebase указывал на эмуляторы в моей локальной среде и фактическую базу данных в реальной среде. По умолчанию функции firebase указывают на prod, и я хочу сказать, чтобы он использовал эмуляторы ТОЛЬКО в среде разработки.
Следующая инициализация firebase делает свое дело:
// initFirebase.ts import { initializeApp } from 'firebase/app'; import { firebaseConfig } from './env'; import { getFirestore, connectFirestoreEmulator } from 'firebase/firestore'; import { getAuth, connectAuthEmulator } from 'firebase/auth'; const app = initializeApp(firebaseConfig); export const db = getFirestore(app); export const auth = getAuth(); if (import.meta.env.MODE === 'development') { connectAuthEmulator(auth, 'http://localhost:9099'); connectFirestoreEmulator(db, 'localhost', 8080); }
…но когда я запускаю это в Cypress, браузер выдает следующую ошибку после запуска моих тестов:
Error: Webpack Compilation Error ./src/initFirebase.ts 8:10 Module parse failed: Unexpected token (8:10) File was processed with these loaders: * ../../.cache/Cypress/8.7.0/Cypress/resources/app/packages/server/node_modules/ts-loader/index.js You may need an additional loader to handle the result of these loaders. | export const db = getFirestore(app); | export const auth = getAuth(); gt; if (import.meta.env.MODE === 'development') { | connectAuthEmulator(auth, 'http://localhost:9099');
Эта ошибка возникает только при открытии в Cypress. Приложение отлично работает при открытии в автономном браузере. Похоже, это проблема с тем, что Cypress не распознает переменные среды Vite ( import.meta.env.MODE
).
Обходной путь
Я прибегнул к тому, чтобы оставить функции эмулятора по умолчанию во время разработки (без if
условных условий), а затем прокомментировал их при развертывании в prod. Я бы предпочел программный способ сделать так, чтобы это произошло.
Вопросы
- Есть ли способ заставить Cypress распознавать переменные среды Vite?
- Есть ли другой способ разделить эту логику, чтобы URL-адреса эмулятора использовались в Cypress, но не в prod?