我當前的問題是我正在嘗試將基本功能部署到 Firebase 云功能,但是我不斷收到兩個不同的錯誤。第一個錯誤是關于具有隱式 any 型別的兩個引數。從我在其他帖子上閱讀的內容來看,我需要做的就是添加型別來修復它,這就是我所做的。這是我遇到第二個錯誤的地方,我只在網上發現了另一個有同樣問題的帖子。該問題的解決方案涉及從他擁有的單獨函式中洗掉型別,這并不真正適用于我。此錯誤表示“意外標記:”,并且指的是引數型別宣告中的冒號。我不 沒有啟用 lint,大多數關于意外令牌的帖子都有作為解決方案,我不希望通過關閉嚴格來禁用型別檢查,所以除了我見過的這兩個解決方案之外,我找不到其他任何東西。當firebase試圖決議函式觸發器時似乎發生了錯誤,但這仍然對我沒有多大幫助。我將在下面添加所有可能有用的相關影像和代碼。如果你還有什么想看的,我也可以添加。謝謝。s 你可能想看的任何其他內容我也可以添加。謝謝。s 你可能想看的任何其他內容我也可以添加。謝謝。
編輯2:讓我感到困惑的是,當我不向引數添加任何型別時,我能夠運行模擬器,并且在我測驗它們時一切正常。我只有在嘗試部署時才會遇到問題。
當前云函式 index.ts
const functions = require("firebase-functions");
const axios = require("axios");
const admin = require('firebase-admin');
const cors = require('cors')({origin: true});
admin.initializeApp();
const db = admin.firestore();
exports.testFunc = functions.https.onRequest((request: any, response: any) => {
cors(request, response, () => {
response.send(request.body)
})
})
專案包.json
{
"name": "local-business-helper",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test"
},
"private": true,
"dependencies": {
"@angular/animations": "~13.0.0",
"@angular/cdk": "^13.0.0",
"@angular/common": "~13.0.0",
"@angular/compiler": "~13.0.0",
"@angular/core": "~13.0.0",
"@angular/fire": "^7.2.0",
"@angular/flex-layout": "^13.0.0-beta.36",
"@angular/forms": "~13.0.0",
"@angular/material": "^13.0.0",
"@angular/platform-browser": "~13.0.0",
"@angular/platform-browser-dynamic": "~13.0.0",
"@angular/router": "~13.0.0",
"axios": "^0.26.1",
"firebase-admin": "^10.1.0",
"firebase-functions": "^3.21.2",
"firebase-tools": "^9.23.3",
"geofire-wrapper": "github:tobias74/geofire-js#upgrade-to-v9-modular",
"moment": "^2.29.3",
"moment-timezone": "^0.5.34",
"ngx-google-places-autocomplete": "^2.0.5",
"ngx-material-timepicker": "^5.5.3",
"rxfire": "^6.0.0",
"rxjs": "~7.4.0",
"tslib": "^2.3.0",
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "~13.0.1",
"@angular/cli": "~13.0.1",
"@angular/compiler-cli": "~13.0.0",
"@types/jasmine": "~3.10.0",
"@types/node": "^12.11.1",
"jasmine-core": "~3.10.0",
"karma": "~6.3.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage": "~2.0.3",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "~1.7.0",
"typescript": "~4.4.3"
}
}
函式包.json
{
"name": "functions",
"scripts": {
"build": "tsc",
"serve": "npm run build && firebase emulators:start --only functions",
"shell": "npm run build && firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "16"
},
"main": "src/index.ts",
"dependencies": {
"firebase-admin": "^10.0.2",
"firebase-functions": "^3.21.2"
},
"devDependencies": {
"firebase-functions-test": "^0.2.0",
"typescript": "^4.5.4"
},
"private": true
}
型別錯誤:
src/index.ts:20:47 - error TS7006: Parameter 'request' implicitly has an 'any' type.
20 exports.testFunc = functions.https.onRequest((request, response) => {
src/index.ts:20:56 - error TS7006: Parameter 'response' implicitly has an 'any' type.
20 exports.testFunc = functions.https.onRequest((request, response) => {
Found 2 errors in the same file, starting at: src/index.ts:20
Error: functions predeploy error: Command terminated with non-zero exit code2
意外的標記:
Error: Error occurred while parsing your function triggers.
/Users/......../functions/src/index.ts:20
exports.testFunc = functions.https.onRequest((request: Request, response: any) => {
SyntaxError: Unexpected token':'
at Object.compileFunction(node: vm: 352:18)
at wrapSafe(node: internal/modules/cjs/loader:1031:15)
at Module.compile(node: internal/modules/cjs/loader:1065:27)
at Object.Module.extensions.js(node: internal/modules/js/loader:1153:10)
at Module.load(node: internal/modules/cjs/loader:981:32)
at Function.Module._load(node: internal/modules/cjs/loader:822:12)
at Module.require(node: internal/modules/cjs/loader:1005:19)
at require(node: internal/modules/cjs/helpers:102:18)
at loadModule(/usr/local/lib/node_modules/firebase-tools/lib/deploy/functions/runtimes/node/triggerParser.js:10:16)
at /usr/local/lib/node_modules/firebase-tools/lib/deploy/functions/runtimes/node/triggerParser.js:34:21
編輯:在注意到有更新后,我更新了函式,錯誤格式略有變化,但還是一樣。
functions: Finished running predeploy script.
functions: ensuring required API cloudfunctions.googleapis.com is enabled...
functions: ensuring required API cloudbuild.googleapis.com is enabled...
functions: required API cloudbuild.googleapis.com is enabled
functions: required API cloudfunctions.googleapis.com is enabled
functions: preparing codebase default for deployment
Error: Failed to load function definition from source: Failed to generate manifest from function source: SyntaxError: Unexpected token':'
uj5u.com熱心網友回復:
盡管這聽起來可能有爭議,但 Cloud Functions 并不理解 TypeScript。事實上,不僅僅是 Cloud Functions,所有 JavaScript 引擎都不理解 TypeScript。在您撰寫代碼時,始終需要編譯器將 TypeScript 代碼構建為 JavaScript。然后運行的是構建的 JS 代碼,而不是 TypeScript 代碼。
是的,TypeScript 的 Cloud Functions 可用,并npm run build -- --watch在您編碼時負責更新構建的代碼。Cloud Functions 實際上運行的是構建的 JS 代碼,而不是 TypeScript 代碼。
您設定的問題是 Cloud Functions 的入口點是.ts檔案而不是.js. 在你的 package.json for Functions 中,你有
"main": "src/index.ts"
您必須將其更改為:
"main": "lib/index.js"
這樣一來,Cloud Functions 的入口點將是一個 JavaScript 檔案,并且也是從您的 TypeScript 代碼構建的 JavaScript。lib/index.js之所以使用它,是因為默認情況下,該tsc命令將在其中構建您的src/index.ts檔案。
您可以檢查.gitignore并注意到該lib檔案夾??已包含在內(因為它的內容總是在每次構建中更改,并且不應進入版本控制)。另請注意,index.js.map您的lib檔案夾中也包含一個檔案。實際上,對于您檔案夾中的每個 TypeScript 檔案,都會在您的檔案夾中創建src一個對應.js的檔案。.js.maplib
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489321.html
