Node 8 Firebase 功能无法从 CloudBuild 部署
Node 8 Firebase functions fails to deploy from CloudBuild
我有一个项目使用 Node 8 引擎从我的本地开发环境成功部署到 firebase 功能到 firebase。我一直试图让它与 CloudBuild 一起工作,但是,由于使用 async 关键字,我收到语法错误:
/workspace/functions/lib/index.js:13
Step #5: app.get('XXXXXXXXX', async (req, resp) => {
Step #5: ^
Step #5:
Step #5: SyntaxError: Unexpected token (
Step #5: at createScript (vm.js:56:10)
Step #5: at Object.runInThisContext (vm.js:97:10)
Step #5: at Module._compile (module.js:549:28)
Step #5: at Object.Module._extensions..js (module.js:586:10)
Step #5: at Module.load (module.js:494:32)
Step #5: at tryModuleLoad (module.js:453:12)
Step #5: at Function.Module._load (module.js:445:3)
Step #5: at Module.require (module.js:504:17)
Step #5: at require (internal/module.js:20:19)
Step #5: at /usr/local/lib/node_modules/firebase-tools/lib/triggerParser.js:21:11
表明节点引擎不是 async/await 感知的,即不是节点 8。引擎在 package.json 中设置并在我的本地环境中工作。
"engines": {
"node": "8"
}
部署正在使用 documentation 中所述的 firebase 容器:
- name: 'gcr.io/[PROJECT_NAME]/firebase'
args: [ 'deploy', '-P', 'prod', '-f', '--only', 'functions','--token', '${_FIREBASE_TOKEN}']
CloudBuild 是否可以将不支持 Node8 的 firebase 函数部署到 different/internal 端点并因此静默降级?
或者我还漏掉了什么?
我试图通过将 .tsconfig 更改为目标 es2015 而不是 es2017 并从 package.json 中删除引擎部分来证明这一理论。结果是函数部署到一个Node8函数?
Step #5: deploying functions
Step #5: functions: ensuring necessary APIs are enabled...
Step #5: functions: all necessary APIs are enabled
Step #5: functions: preparing functions directory for uploading...
Step #5: functions: packaged functions (91.42 KB) for uploading
Step #5: functions: functions folder uploaded successfully
Step #5: functions: updating Node.js 8 function XXXXXX(us-central1)...
Step #5: functions[XXXXXXX(us-central1)]: Successful update operation.
Step #5:
Step #5: Deploy complete!
我认为这是因为节点 8 函数已经存在,所以它只是更新而不是创建,但可能表明代码解析器是基于 node6 的,并且在通过 cloudbuild 部署时忽略了引擎设置?
Firebase 工具将解析您的代码以查找函数触发器名称,这似乎是它出错的地方。
我的猜测是您的自定义容器 gcr.io/[PROJECT_NAME]/firebase
是 运行 与 ES2017/ES8 async/await
关键字不兼容的 Node 版本。
您需要确保您的容器至少是 运行 Node v7.6.0。
希望对您有所帮助。
我有一个项目使用 Node 8 引擎从我的本地开发环境成功部署到 firebase 功能到 firebase。我一直试图让它与 CloudBuild 一起工作,但是,由于使用 async 关键字,我收到语法错误:
/workspace/functions/lib/index.js:13
Step #5: app.get('XXXXXXXXX', async (req, resp) => {
Step #5: ^
Step #5:
Step #5: SyntaxError: Unexpected token (
Step #5: at createScript (vm.js:56:10)
Step #5: at Object.runInThisContext (vm.js:97:10)
Step #5: at Module._compile (module.js:549:28)
Step #5: at Object.Module._extensions..js (module.js:586:10)
Step #5: at Module.load (module.js:494:32)
Step #5: at tryModuleLoad (module.js:453:12)
Step #5: at Function.Module._load (module.js:445:3)
Step #5: at Module.require (module.js:504:17)
Step #5: at require (internal/module.js:20:19)
Step #5: at /usr/local/lib/node_modules/firebase-tools/lib/triggerParser.js:21:11
表明节点引擎不是 async/await 感知的,即不是节点 8。引擎在 package.json 中设置并在我的本地环境中工作。
"engines": {
"node": "8"
}
部署正在使用 documentation 中所述的 firebase 容器:
- name: 'gcr.io/[PROJECT_NAME]/firebase'
args: [ 'deploy', '-P', 'prod', '-f', '--only', 'functions','--token', '${_FIREBASE_TOKEN}']
CloudBuild 是否可以将不支持 Node8 的 firebase 函数部署到 different/internal 端点并因此静默降级?
或者我还漏掉了什么?
我试图通过将 .tsconfig 更改为目标 es2015 而不是 es2017 并从 package.json 中删除引擎部分来证明这一理论。结果是函数部署到一个Node8函数?
Step #5: deploying functions
Step #5: functions: ensuring necessary APIs are enabled...
Step #5: functions: all necessary APIs are enabled
Step #5: functions: preparing functions directory for uploading...
Step #5: functions: packaged functions (91.42 KB) for uploading
Step #5: functions: functions folder uploaded successfully
Step #5: functions: updating Node.js 8 function XXXXXX(us-central1)...
Step #5: functions[XXXXXXX(us-central1)]: Successful update operation.
Step #5:
Step #5: Deploy complete!
我认为这是因为节点 8 函数已经存在,所以它只是更新而不是创建,但可能表明代码解析器是基于 node6 的,并且在通过 cloudbuild 部署时忽略了引擎设置?
Firebase 工具将解析您的代码以查找函数触发器名称,这似乎是它出错的地方。
我的猜测是您的自定义容器 gcr.io/[PROJECT_NAME]/firebase
是 运行 与 ES2017/ES8 async/await
关键字不兼容的 Node 版本。
您需要确保您的容器至少是 运行 Node v7.6.0。
希望对您有所帮助。