source

Firebase 비동기 대기 스타일을 위한 클라우드 기능

factcode 2023. 7. 18. 22:01
반응형

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

반응형