Почему эмулятор Angular Firebase Cloud Functions не обновляет функции без полного развертывания?

Я пытаюсь настроить свою среду разработки. Я использую Angular 5 TypeScript, VisualStudio IDE на компьютере с Windows 10. Я использую Firebase Hosting, Firestore и Firebase Функции. Я пишу функции в папке "functions" в файле TypeScript (index.ts). Следуя инструкциям по локальному тестированию функций Firebase ( https://firebase.google.com/docs/functions/local-emulator). Я могу получить функции, работающие локально как на локальном сервере через "firebase serve", так и через оболочку функций, как описано в ссылке. Однако при внесении изменений в index.ts функция не обновляется при повторном пинге. Он обновляется только тогда, когда я выполняю полную команду "firebase deploy functions". Это противоречит цели использования локального эмулятора функций. Идея состоит в том, чтобы избежать необходимости развертывания функции каждый раз, когда вы что-то меняете. Может быть, что-то с firebase.json? Я скопировал его ниже вместе с выводом 'ng version'.

Angular CLI: 1.6.8
Node: 6.11.5
OS: win32 x64
Angular: 5.2.4
... cdk, common, compiler, compiler-cli, core, forms, http
... language-service, material, platform-browser
... platform-browser-dynamic, router

@angular/animations: 5.2.5
@angular/cli: 1.6.8
@angular-devkit/build-optimizer: 0.0.42
@angular-devkit/core: 0.0.29
@angular-devkit/schematics: 0.0.52
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.9.8
@schematics/angular: 0.1.17
typescript: 2.5.3
webpack: 3.10.0


// firebase.json
{
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ],
    "source": "functions"
  },
  "hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  },
  "database": {
    "rules": "database.rules.json"
  }
}

1 ответ

Решение

TypeScript имеет фазу транспорта, которая необходима для получения кода в JavaScript (ES6), что можно понять с помощью облачных функций. Вам нужно будет выполнить эту фазу переноса, чтобы эмулятор воспринял изменения.

Используя файл package.json, созданный интерфейсом командной строки Firebase для новых проектов TypeScript, вы можете запустить npm run build проводить без развертывания. Или вы можете использовать tsc --watch чтобы процесс автоматически переносил изменения в ваш TypeScript.

Похоже, ваш package.json может быть очень старым и не содержит новейших сценариев npm для работы с TypeScript. Я предлагаю воссоздать его с последней версией Firebase CLI, если у вас нет npm run build имеется в наличии.

Кроме того, я написал подробный блог об этом - вы можете прочитать его здесь.

Другие вопросы по тегам