Firebase-tools不会将新创建的功能上传到Firebase

时间:2019-04-21 19:42:39

标签: firebase google-cloud-functions firebase-cli

我正在开发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是一个现有功能,会不断部署到Firebase。另一方面,addGroupIDNewTestFunction是一个新函数,即使它们位于同一文件中并以相同的方式引用,也不会部署到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
    })
})

如前所述,我在main.index文件中指定了16个函数,这些函数应部署到Firebase函数中。但是,仅现有的12个功能将被部署。以下代码段是在Angular项目中运行firebase deploy --only functions时输出的Firebase给我的信息。

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.

3 个答案:

答案 0 :(得分:0)

您应检查已编译js文件的目录。

默认值为functions/lib/

如果您像../../foo.ts一样在functions/srcfunctions/src/tests等处的任何位置进行导入,则已编译的js文件为functions/lib/{any}/foo.js

部署目标文件仅是functions/lib/*.js。因此,functions/lib/{any}/foo.js被忽略。

您应该更改目录或文件结构。

如果原因是测试文件,则应使tsconfig.json部署并排除它们。

答案 1 :(得分:0)

我想向大家介绍上述问题的解决方案的最新信息。在我的index.ts文件之一中,我有以下require语句,var mailgun = require('mailgun-js')。每当我用import *作为'mailgun-js'的mailgun替换了require语句时,所有功能都被正确部署。

关于整个问题,最令人困惑的部分是即使事情无法正常进行,我也只会收到成功消息。非常感谢你们的迅速支持和所有建议!

答案 2 :(得分:0)

我遇到了完全相同的问题,解决方案是编辑functions / src / index.ts而不是functions / lib / index.js

在我的情况下,它是index.ts,因为我在使用“ firebase init”初始化项目时选择了该选项,您的情况也取决于它,也可以是index.js,但始终在/ src上,而不是在/ lib中。

我认为/ lib文件夹是否为已编译文件。