Firebase 비동기 대기 스타일을 위한 클라우드 기능
클라우드 함수가 비동기-Await 표기법을 지원하지 않는 것 같습니다.그들이 할 때까지 내가 바벨을 사용할 수 있는 방법이 있습니까? 아니면 약속을 사용하는 것이 권장됩니까?
노드에 있는 현재 기능은 다음과 같습니다.
exports.getToken = async (req, res) => {
//1. Generate token from Braintree
const result = await gateway.clientToken.generate();
//2. Return the client token
res.json(result.clientToken);
};
Cloud Functions는 node.js의 LTS 버전을 실행하며 문서에 따르면 현재 6.14.0입니다.노드 6.x는 비동기/wait를 포함하지 않는 EcmaScript 6을 지원합니다.
그러나 코드를 TypeScript로 작성하여 ES5/ES6으로 변환하면 비동기/대기 사용을 약속으로 효과적으로 변환할 수 있습니다.웹 검색에 따르면 이 플러그인을 사용하여 Babel과 유사한 트랜스파일링을 수행할 수 있습니다.
Firebase CLI를 사용하면 현재 Firebase 팀이 개발자에게 권장하는 기본 TypeScript 지원을 통해 새로운 Cloud Functions 프로젝트를 초기화할 수 있습니다.
TypeScript를 사용하지 않으려면 노드 8(현재 베타 버전이며 일반 JavaScript에 대한 비동기/대기 기능을 지원함)을 배포 대상으로 선택할 수도 있습니다.설명서에 따라 패키지를 편집할 수 있습니다.json to는 함수가 노드 8에 배포되어야 함을 나타냅니다.
이제 Node.js 버전 8을 사용할 수 있습니다.functions/package.json
:
"engines": {
"node": "8"
}
예: https://github.com/firebase/functions-samples/blob/Node-8/authenticated-json-api/functions/package.json
TypeScript를 transfile하는 대신에, 나는 이 매우 좋은 게시물을 팔로우하고 이 저장소를 본 후에 Javascript를 transfile했습니다.
기본적으로 다음을 수행할 수 있습니다.
npm install -g @babel/cli @babel/core @babel/preset-env
업데이트:
"7.0.0-beta.51" 버전의 babel에 문제가 있습니다."7.0.0-165.44"는 여전히 괜찮습니다.
안정 버전 6으로 전환npm install --save-dev babel-clibel-dev-env
프로젝트 폴더 내에 .babelrc 파일을 만듭니다.
{
"presets": [
["@babel/env", {
"targets": {
"node": "6.11.5"
}
}]
]
}
"functions" 폴더를 "firebase"로 이동합니다.Functions" 폴더를 선택한 후 실행
babel firebaseFunctions --out-dir functions --copy-files --ignore firebaseFunctions/node_modules
또는 파일을 변환할 각 파일에 대해 이 명령을 실행합니다.
babel originalfile.js --out-file transpiledfile.js
위의 해결책들은 저에게만 효과가 없었습니다.최신 파이어베이스 도구로 업데이트해야 했습니다.
npm update -g firebase-tools
패키지를 업데이트합니다.json(추가 포함):
"engines": {"node": "8"}
비동기/동기 장치로 모든 것이 잘 작동했습니다.
이 블로그의 크레딧 https://howtofirebase.com/cloud-functions-migrating-to-node-8-9640731a8acc
의 신의에서.functions/.eslintrc.json
가 로설된일로 되어 .'ecmaVersion': 2017
오류가 됩니다. eslint 구문 오류가 제거됩니다.
"parserOptions": {
"ecmaVersion": 2017
},
의 신의에서.functions/package.json
세트 일트세파node
을 의로버전으로 합니다.8
아래에 추가함으로써
"engines": {
"node": "8"
},
클라우드 노드 버전이 8로 업데이트됩니다. 기본 노드 버전은 6입니다.
@adam이 말했듯이, 글로벌 파이어베이스 패키지를 다시 설치/업그레이드하는 문제를 해결했습니다.
차이점은 제 경우 NVM(노드 버전 관리자)을 사용했다는 점입니다.어떻게든, 내 기본 노드(v13.x)는 파이어베이스-툴을 가지고 있었지만 나는 프로젝트 노드(v10/8)에 전역적으로 설치되지 않았기 때문에 먼저:
nvm use 10
그러면:
npm i -g firebase-tools
올바른 노드 버전에서 다시 설치하면 비동기 기능이 제대로 작동합니다.
언급URL : https://stackoverflow.com/questions/44444273/cloud-functions-for-firebase-async-await-style
'source' 카테고리의 다른 글
딕트를 OrderedDict로 변환하는 중 (0) | 2023.07.18 |
---|---|
Tkinter 텍스트 위젯에서 입력을 가져오는 방법은 무엇입니까? (0) | 2023.07.18 |
What does it mean to squash commits in git? (0) | 2023.07.18 |
Python의 람다 식 내부 할당 (0) | 2023.07.18 |
@foo는 왜.파이썬의 세터는 나에게 맞지 않습니까? (0) | 2023.07.18 |