Для разработчиков, которые предпочитают писать функции на TypeScript, Cloud Functions предлагает два типа поддержки:
- Создайте и настройте проекты TypeScript для автоматической транспиляции при инициализации (
firebase init functions). - Транспилировать существующий исходный код TypeScript в JavaScript во время развертывания с помощью хука predeploy.
Следуя инструкциям в этом руководстве, вы можете перенести существующий проект JavaScript в TypeScript и продолжить развертывание функций, используя хук перед развертыванием для транспиляции исходного кода. TypeScript имеет много преимуществ перед обычным JavaScript при написании функций:
- TypeScript поддерживает новейшие функции JavaScript, такие как async/await, упрощая управление промисами.
- Линтер Cloud Functions выделяет распространенные проблемы в коде.
- Типобезопасность помогает избежать ошибок выполнения в развернутых функциях.
Если вы не знакомы с TypeScript, прочитайте краткое руководство.
Инициализация нового проекта Cloud Functions с помощью TypeScript
Запустите firebase init functions в новом каталоге. Инструмент позволяет создать проект на JavaScript или TypeScript. Выберите TypeScript, чтобы получить следующую структуру проекта:
myproject
+- functions/ # Directory containing all your functions code
|
+- package.json # npm package file describing your Cloud Functions code
|
+- tsconfig.json
|
+- .eslintrc.js # Optional file if you enabled ESLint
+- tsconfig.dev.json # Optional file that references .eslintrc.js
|
+- src/ # Directory containing TypeScript source
| |
| +- index.ts # main source file for your Cloud Functions code
|
+- lib/
|
+- index.js # Built/transpiled JavaScript code
|
+- index.js.map # Source map for debugging
После завершения инициализации раскомментируйте пример в index.ts и запустите npm run serve, чтобы увидеть функцию Hello World в действии.
Как использовать существующий проект TypeScript
Если у вас уже есть проект TypeScript, вы можете добавить хук predeploy, чтобы проект транспилировался каждый раз, когда вы развертываете код в Cloud Functions for Firebase. Вам понадобится правильно сформированный файл tsconfig.json и проект Firebase. Кроме того, вам нужно будет внести следующие изменения в конфигурацию Firebase:
Измените
package.json, чтобы добавить скрипт bash для сборки проекта TypeScript. Пример:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...Измените файл
firebase.json, чтобы добавить хук predeploy для запуска скрипта сборки. Пример:{ "functions": { "predeploy": "npm --prefix functions run build", } }
В такой конфигурации команда firebase deploy --only functions создает код TypeScript и развертывает его в виде функций.
Перенос существующего проекта JavaScript в TypeScript
Если у вас есть проект Cloud Functions, который вы инициализировали и разрабатывали на JavaScript, вы можете перенести его на TypeScript. Перед началом работы настоятельно рекомендуем создать контрольную точку git или другую резервную копию.
Чтобы перенести существующий проект JavaScript Cloud Functions:
- Создайте контрольную точку Git и сохраните копии существующих исходных файлов JavaScript.
- В каталоге проекта запустите
firebase init functionsи выберитеTypeScript, когда появится запрос на выбор языка для написания функций. - Когда появится запрос на перезапись существующего файла
package.json, выберите Нет, если вы не уверены, что хотите удалить существующий файл. - Удалите файл
index.tsв каталогеfunctions/srcи замените его существующим исходным кодом. - В файле
tsconfig.json, созданном при инициализации, задайте параметры компилятора, чтобы разрешить JavaScript:"allowJs": true. - Скопируйте сохраненный файл
package.jsonв каталогfunctionsи измените его, чтобы задать для"main"значение"lib/index.js". Также в
package.jsonдобавьте скрипт сборки для TypeScript, например:{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...Добавьте
"typescript"в качестве зависимости разработки, выполнив командуnpm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser.Чтобы установить все зависимости, выполните команду
npm install --save @types/<dependency>.Перепишите исходный код из JS в TS.
Эмуляция функций TypeScript
Чтобы протестировать функции TypeScript локально, вы можете использовать инструменты эмуляции, описанные в разделе Локальный запуск функций. Перед использованием этих инструментов важно скомпилировать код, поэтому обязательно запустите npm run build в каталоге функций, прежде чем запускать firebase emulators:start или firebase functions:shell. Вы также можете запустить npm run serve или npm run shell. Эти команды запускают сборку и оболочку функций.
Журналы функций для проектов TypeScript
Во время firebase deploy index.ts вашего проекта транспилируется в index.js. Это означает, что в журнале Cloud Functions будут выводиться номера строк из файла index.js, а не из написанного вами кода. Чтобы вам было проще найти
соответствующие пути и номера строк в index.ts,
firebase deploy создает functions/lib/index.js.map. Вы можете использовать эту карту кода в любой интегрированной среде разработки или через модуль Node.