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

Я пытаюсь настроить свою среду разработки. Я использую Angular 5 TypeScript, VisualStudio IDE на машине с Windows 10. Я использую функции хостинга Firebase, 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"
  }
}

person dve3413    schedule 06.05.2018    source источник
comment
Есть ли у вас этап транспиляции при работе с кодом облачных функций? Пожалуйста, расскажите подробнее о шагах, которые вы предпринимаете при работе с эмулятором.   -  person Doug Stevenson    schedule 06.05.2018
comment
Нет транспиляционной стадии, в документах такого не встречал. Я просто вношу изменения в функцию в index.ts и предполагаю, что сработает транспайл горячей замены? Это похоже на код пользовательского интерфейса Angular. Это не так, как работает? Спасибо!   -  person dve3413    schedule 06.05.2018
comment
В своем вопросе вы сказали index.js. В своем комментарии вы только что сказали index.ts. Что он? Вы используете простой JavaScript или TypeScript для написания кода облачных функций?   -  person Doug Stevenson    schedule 06.05.2018
comment
это TypeScript index.ts. Обновил вопрос, спасибо.   -  person dve3413    schedule 06.05.2018


Ответы (1)


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

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

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

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

person Doug Stevenson    schedule 06.05.2018