簡體   English   中英

Firebase-tools 沒有將新創建的函數上傳到 Firebase

[英]Firebase-tools is not uploading newly created functions to Firebase

我正在開發一個 Angular 項目,我正在編寫 Firebase 函數,我想將這些函數部署到 Firebase。 當我為 Firebase 編寫更多函數並嘗試使用firebase deploy --only functions將它們部署到 Firebase 時,只有現有的函數會被部署。 更具體地說,我有 16 個功能要部署到 Firebase,但只有相同的 12 個被部署。

到目前為止,我已經做了以下嘗試來解決這個問題:

  1. 我確保我使用的是最新的 firebase-tools (6.7.0)
  2. 我已經嘗試使用firebase deploy --only functions:<NEW FUNCTION NAME HERE>
  3. 從 functions/src/index.ts 文件中刪除所有導出函數並上傳一個空白 index.ts。 即使使用空白 index.ts 文件,相同的功能仍會部署到 Firebase。
  4. 我知道將函數上傳到 Firebase 時可能會有長達 30 秒的延遲,所以我什至等了一整晚才嘗試上傳新函數。
  5. 我已經使用firebase init從頭開始重新創建整個函數目錄,它仍然不斷上傳相同的函數。
  6. 我從免費的 Firebase 計划升級到 Spark 計划。

以下代碼是位於 functions/src/index.ts 中的主要 index.ts 文件。

import * as functions from 'firebase-functions';
import { firestore } from 'firebase-admin';
import * as moment from 'moment';
import { request } from 'https';

// Local Functions Imports
import * as Permissions from './permissions';
import * as Groups from './groups';
import * as Shifts from './shifts';
import * as Roles from './roles';
import * as Session from './sessions';
import * as Users from './users';
import * as Slack from './slack';
import * as ScheduleChanges from './schedule-changes';
import * as Email from './email';

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

/* -------- USER MANAGEMENT -------------- */
export const createUser = Users.createUser;
export const addUserToDefaultJoinGroups = Users.addUserToDefaultJoinGroups;
export const deleteUser = Users.deleteUser;

/* -------- SESSION MANAGEMENT -------------- */
export const addSessionID = Session.addSessionID;

/* -------- ROLE MANAGEMENT -------------- */
export const addRoleID = Roles.addRoleID;
export const removeAllShiftsAssociatedWithRole = Roles.removeAllShiftsAssociatedWithRole;

/* -------- SHIFT MANAGEMENT -------------- */
export const addShiftID = Shifts.addShiftID;
export const hourly_job = Shifts.hourly_job;
export const changeShiftStatsTest = Shifts.changeShiftStatsTest;

/* -------- GROUPS MANAGEMENT -------------- */
export const addGroupID = Groups.addGroupID;
export const addGroupIDNewTestFunction = Groups.addGroupIDNewTestFunction;

/* -------- PERMISSIONS MANAGEMENT -------------- */
export const addPermissionID = Permissions.addPermissionID;

/* -------- Emailing -------------- */
export const sendWelcomeEmailToNewUser = Email.sendWelcomeEmailToNewUser;
export const sendWelcomeEmailToNewUser2 = Email.sendWelcomeEmailToNewUser2;

/* -------- SLACK MESSAGING MANAGEMENT -------------- */
export const sendWelcomingMessage = Slack.sendWelcomingMessage;

/* -------- SCHEDULE CHANGES MANAGEMENT -------------- */
export const addScheduleChangeID = ScheduleChanges.addScheduleChangeID;

從上面的代碼中可以看出,有 16 個函數應該部署到 Firebase。 但是,只有 12 個被部署。 以下代碼片段來自functions/src/groups/index.ts。 在這個文件中,addGroupID 是一個現有的 function,它會不斷地部署到 Firebase。 另一方面, addGroupIDNewTestFunction 是一個新的 function ,即使它們在同一個文件中並且以相同的方式引用,也沒有部署到 Firebase 。

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin'

export const addGroupID = functions.firestore
.document("organizations/{organizationID}/groups/{groupID}")
.onCreate(async (snap, context) => {
    console.log("Adding group id");
    await admin.firestore()
    .doc(`organizations/${context.params.organizationID}/groups/${context.params.groupID}`).update({
        'groupID': context.params.groupID
    })
})

export const addGroupIDNewTestFunction = functions.firestore
.document("organizations/{organizationID}/groups2/{groupID}")
.onCreate(async (snap, context) => {
    console.log("Adding group id");
    await admin.firestore()
    .doc(`organizations/${context.params.organizationID}/groups/${context.params.groupID}`).update({
        'groupID': context.params.groupID
    })
})

如前所述,我在主 index.ts 文件中指定了 16 個函數,這些函數應該部署到 Firebase 函數中。 但是,只有現有的 12 個功能正在部署。 以下代碼片段是 output firebase 在我運行firebase deploy --only functions時給我的。

firebase deploy --only functions

=== Deploying to 'university-scheduling'...

i  deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint

> functions@ lint /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions
> tslint --project tsconfig.json

no-unused-variable is deprecated. Since TypeScript 2.9. Please use the built-in compiler checks instead.

Could not find implementations for the following rules specified in the configuration:
    use-input-property-decorator
    use-output-property-decorator
    use-host-property-decorator
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.


WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/email/index.ts:2:13 - 'admin' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/index.ts:2:1 - All imports on this line are unused.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/index.ts:3:13 - 'moment' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/index.ts:4:1 - All imports on this line are unused.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/slack/index.ts:2:13 - 'admin' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/slack/index.ts:6:7 - 'request' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/slack/index.ts:7:7 - 'options' is declared but its value is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/users/index.ts:3:1 - All imports on this line are unused.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/users/index.ts:43:11 - 'groups' is declared but itsvalue is never read.
WARNING: /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions/src/users/index.ts:65:11 - 'uid' is declared but its value is never read.

Running command: npm --prefix "$RESOURCE_DIR" run build

> functions@ build /Users/brandon/Dropbox/Bearforce_Scheduling/bearforce-website/functions
> tsc

✔  functions: Finished running predeploy script.
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (106.24 KB) for uploading
✔  functions: functions folder uploaded successfully
⚠  appEngineLocation us-central1
i  functions: updating Node.js 6 function createUser(us-central1)...
i  functions: updating Node.js 6 function deleteUser(us-central1)...
i  functions: updating Node.js 6 function addSessionID(us-central1)...
i  functions: updating Node.js 6 function addRoleID(us-central1)...
i  functions: updating Node.js 6 function removeAllShiftsAssociatedWithRole(us-central1)...
i  functions: updating Node.js 6 function addShiftID(us-central1)...
i  functions: updating Node.js 6 function hourly_job(us-central1)...
i  functions: updating Node.js 6 function changeShiftStatsTest(us-central1)...
i  functions: updating Node.js 6 function addGroupID(us-central1)...
i  functions: updating Node.js 6 function addPermissionID(us-central1)...
i  functions: updating Node.js 6 function sendWelcomingMessage(us-central1)...
i  functions: updating Node.js 6 function addScheduleChangeID(us-central1)...
✔  scheduler: all necessary APIs are enabled
✔  functions[addPermissionID(us-central1)]: Successful update operation.
✔  functions[createUser(us-central1)]: Successful update operation.
✔  functions[addShiftID(us-central1)]: Successful update operation.
✔  functions[changeShiftStatsTest(us-central1)]: Successful update operation.
✔  functions[sendWelcomingMessage(us-central1)]: Successful update operation.
✔  functions[hourly_job(us-central1)]: Successful update operation.
✔  functions[addSessionID(us-central1)]: Successful update operation.
✔  functions[deleteUser(us-central1)]: Successful update operation.
✔  functions[addGroupID(us-central1)]: Successful update operation.
✔  functions[removeAllShiftsAssociatedWithRole(us-central1)]: Successful update operation.
✔  functions[addScheduleChangeID(us-central1)]: Successful update operation.
✔  functions[addRoleID(us-central1)]: Successful update operation.

✔  Deploy complete!

Please note that it can take up to 30 seconds for your updated functions to propagate.

您應該檢查編譯 js 文件的目錄。

默認值為functions/lib/

如果你在functions/srcfunctions/src/tests等的任何地方導入../../foo.ts ,那么編譯后的 js 文件是functions/lib/{any}/foo.js

部署目標文件僅為functions/lib/*.js 因此, functions/lib/{any}/foo.js被忽略。

您應該更改目錄或文件結構。

如果原因是測試文件,那么您應該使用tsconfig.json進行部署並排除它們。

我想向你們提供有關我上述問題的解決方案的最新信息。 在我的一個 index.ts 文件中,我有以下 require 語句,var mailgun = require('mailgun-js')。 每當我將這個 require 語句替換為 import * as mailgun from 'mailgun-js' 時,所有功能都已正確部署。

關於整個問題最令人困惑的部分是,即使事情沒有正常工作,我也只收到成功消息。 我非常感謝你們的快速支持和所有建議!!

我遇到了完全相同的問題,解決方案是編輯 functions/src/index.ts 而不是 functions/lib/index.js

就我而言,它是 index.ts,因為我在使用“firebase init”初始化項目時選擇了該選項,您的情況取決於它,也可以是 index.js,但始終在 /src 中而不是在 /lib 中。

我認為 /lib 文件夾如果用於編譯文件。

部署函數時,編譯器會將 src/ .ts 文件轉換為“lib/src/ .js”文件。 不知何故,我在“lib/*js”空間中從以前的部署中得到了一些文件。 果然,這些文件正在部署,但包含我創建的新 function 的文件位於“lib/src/*js”中。沒有新的更改被傳遞到雲函數中。

所以我進入了 package.json 並改變了

"main": "lib/index.js",

讀書

"main": "lib/src/index.js",

為了清理,我從“lib/”中刪除了 all.js 文件

我回來做生意了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM