Как я могу установить переменные среды в SvelteKit (vite), которые могут быть прочитаны Cypress?

# #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?