TypeScript로 함수를 작성하려는 개발자를 위해 Cloud Functions는 다음과 같은 두 가지 기능을 지원합니다.
- TypeScript 프로젝트를 만들고 초기화 시 자동 변환 컴파일하도록 구성(
firebase init functions
) - 배포 전 후크를 통해 기존 TypeScript 소스를 배포할 때 자바스크립트로 트랜스파일
이 가이드의 안내에 따라 기존 자바스크립트 프로젝트를 TypeScript로 마이그레이션하고 소스 코드를 트랜스파일하는 배포 전 후크를 사용하여 함수를 계속 배포할 수 있습니다. 함수를 작성할 때는 TypeScript가 순수 자바스크립트보다 유용합니다.
- TypeScript는 async/await 등의 최신 자바스크립트 기능을 지원하므로 프라미스 관리가 간편합니다.
- 코딩 중에 Cloud Functions 린터가 일반적인 문제점을 알려줍니다.
- 유형 안전성이 제공되므로 배포된 함수의 런타임 오류를 방지할 수 있습니다.
TypeScript를 처음 사용하는 경우 TypeScript in 5 minutes를 참조하세요.
TypeScript로 새 Cloud Functions 프로젝트 초기화
새 디렉터리에서 firebase init functions
를 실행합니다. 이 도구는 자바스크립트 또는 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 프로젝트가 있는 경우 배포 전 후크를 추가하면 Cloud Functions for Firebase로 코드를 배포할 때마다 프로젝트를 변환 컴파일할 수 있습니다. 올바르게 구성된 tsconfig.json
파일과 Firebase 프로젝트가 필요하며 Firebase 구성을 다음과 같이 수정해야 합니다.
package.json
을 편집하여 TypeScript 프로젝트를 빌드하는 bash 스크립트를 추가합니다. 예를 들면 다음과 같습니다.{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...
firebase.json
을 편집하여 TypeScript 프로젝트를 빌드하는 bash 스크립트를 추가합니다. 예를 들면 다음과 같습니다.{ "functions": { "predeploy": "npm --prefix functions run build", } }
이 구성을 사용하면 firebase deploy --only functions
명령어가 TypeScript 코드를 빌드하여 함수로 배포합니다.
기존 자바스크립트 프로젝트를 TypeScript로 마이그레이션
자바스크립트로 초기화하고 개발한 기존 Cloud Functions 프로젝트가 있는 경우 TypeScript로 마이그레이션할 수 있습니다. 시작하기 전에 git 체크포인트 등의 백업을 만들어 두는 것이 좋습니다.
기존 JavaScript Cloud Functions 프로젝트를 마이그레이션하는 방법
- git 체크포인트를 만들고 기존 자바스크립트 소스 파일의 복사본을 저장합니다.
- 프로젝트 디렉터리에서
firebase init functions
를 실행하고 함수 작성 언어를 묻는 메시지가 표시되면TypeScript
를 선택합니다. - 기존
package.json
파일을 덮어쓸지 묻는 메시지가 표시되면 기존 파일이 확실히 필요 없는 경우를 제외하고는 아니요를 선택합니다. functions/src
디렉터리에서index.ts
를 삭제하고 기존 소스 코드로 대체합니다.- 초기화 시 생성된
tsconfig.json
파일에서 자바스크립트를 허용하는 컴파일러 옵션("allowJs": true
)을 설정합니다. - 저장된
package.json
파일을functions
디렉터리에 복사하고 수정하여"main"
을"lib/index.js"
로 설정합니다. 또한
package.json
에서 다음과 같이 TypeScript용 빌드 스크립트를 추가합니다.{ "name": "functions", "scripts": { "build": "npm run lint && tsc" } ...
npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser
를 실행하여"typescript"
를 dev 종속 항목으로 추가합니다.모든 종속 항목에 대해
npm install --save @types/<dependency>
를 실행합니다..js 소스 코드를 필요에 따라 .ts로 재작성합니다.
TypeScript 함수 에뮬레이션
TypeScript 함수를 로컬로 테스트하려면 로컬에서 함수 실행에서 설명한 에뮬레이션 도구를 사용할 수 있습니다. 이러한 도구를 사용하기 전에 코드를 컴파일하는 것이 중요합니다. 따라서 firebase emulators:start
또는 firebase functions:shell
을 실행하기 전에 함수 디렉터리 내에서 npm run build
를 실행합니다. 또는 npm run serve
또는 npm run shell
을 바로가기로 실행합니다. 이 명령어는 둘 다 빌드를 실행하고 함수 셸을 제공/시작합니다.
TypeScript 프로젝트의 함수 로그
firebase deploy
실행 중에 프로젝트의 index.ts
가 index.js
로 변환 컴파일됩니다. 즉, Cloud Functions 로그에는 내가 작성한 코드가 아닌 index.js
파일의 줄 번호가 출력됩니다. firebase deploy
는 해당 경로와 줄 번호를 index.ts
에서 쉽게 찾을 수 있도록 functions/lib/index.js.map
을 만듭니다. 원하는 IDE에서 또는 node 모듈을 통해 이 소스 맵을 사용할 수 있습니다.