Для разработчиков, предпочитающих писать функции на TypeScript, Cloud Functions предоставляет два типа поддержки:
- Создайте и настройте проекты TypeScript для автоматической транспиляции при инициализации (
firebase init functions). - Преобразуйте существующий исходный код TypeScript в JavaScript во время развертывания с помощью хука predeploy .
Следуя инструкциям в этом руководстве, вы можете перевести существующий проект JavaScript на TypeScript и продолжить развертывание функций, используя хук predeploy для транспиляции исходного кода. TypeScript предлагает множество преимуществ по сравнению с обычным JavaScript при написании функций:
- TypeScript поддерживает новейшие возможности JavaScript, такие как async/await, что упрощает управление промисами.
- Линтер Cloud Functions выделяет распространенные проблемы во время написания кода.
- Типобезопасность помогает избежать ошибок во время выполнения развернутых функций.
Если вы новичок в TypeScript, посмотрите видео «TypeScript за 5 минут» .
Инициализация нового проекта 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 или другую резервную копию перед началом работы.
Для миграции существующего проекта Cloud Functions на JavaScript:
- Создайте контрольную точку 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 в каталоге `functions` перед запуском 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 . Вы можете использовать эту карту исходного кода в предпочитаемой вами IDE или через модуль Node.js.