package.json中没有将模块'@ google-cloud / firestore'列为依赖项

时间:2019-03-03 16:31:57

标签: google-cloud-firestore google-cloud-functions

我正在使用TypeScript编写我的 Firebase Cloud Functions 。在我的代码中,我需要引用Firestore数据类型,例如CollectionReference,QuerySnapshot等。例如:

export const Employee: CollectionReference = admin.firestore().collection('Master/Admin/Employees');
or
async function convertToCsv(snapshot: QueryDocumentSnapshot[])

要在代码中使用这些类型,请在文件(.ts)顶部使用以下几行:

import { QueryDocumentSnapshot, Timestamp, Query, CollectionReference } from '@google-cloud/firestore';

当我使用以下方式在PC上本地运行Firebase函数时,此代码可以正常工作

  

firebase提供--only功能

但是当我尝试在Firebase服务器上部署相同的代码时,出现以下tslint错误,并且代码部署失败。

Module '@google-cloud/firestore' is not listed as dependency in package.json

如果我在package.json中添加依赖项

"dependencies": {
    "body-parser": "^1.18.3",
    ...
    "@google-cloud/firestore": "~1.0.1"
  },

我的功能得到部署,但是在执行时,出现以下错误:

Error: Argument "value" is not a valid QueryValue. Detected an object of type "Timestamp" that doesn't match the expected instance. Please ensure that the Firestore types you are using are from the same NPM package.
    at Validator.(anonymous function).err [as isQueryValue] (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/build/src/validate.js:93:27)
    at Query.where (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/build/src/reference.js:916:25)
    at /user_code/lib/services/reports/index.js:53:22

编译失败的Java脚本行是(请参阅**):

const firestore_1 = require("@google-cloud/firestore");
let query = collection
                    .where('divisionCode', '==', divisionCode)
                    **.where('zzLastUpdateOn', '>=', firestore_1.Timestamp.fromDate(startDate))**
                    .where('zzLastUpdateOn', '<=', firestore_1.Timestamp.fromDate(endDate))
                    .where('zzIsDeleted', '==', false);

我真的不知道该怎么办,请帮忙。请知道我对TypeScript和JavaScript领域很陌生。

  

请知道,同一项目中的其他功能(我正在向“时间戳记”字段中添加值)工作正常。而且此功能在桌面(本地主机)的“云功能”模拟模式下也可以正常工作。

您的帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我的代码中的以下更改有助于解决此问题。

我现在使用的是“ firestore.Timestamp ”,而不是使用“ 时间戳”。这种变化帮助我进一步发展。

现在我的代码如下:

TypeScript代码:

import re
s = "Hello, how are you?"
s_replaced = re.sub('(H|h)', '*', s)

以及生成的Java脚本代码:

let query: Query = collection
                .where(...)
                .where('zzLastUpdateOn', '>=', firestore.Timestamp.fromDate(startDate))
                .where('zzLastUpdateOn', '<=', firestore.Timestamp.fromDate(endDate))
                .where(...);

我的建议基于https://stackoverflow.com/a/52609487/6943737查询。