最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

部署Firebase Typescript函数错误;解组 package.json: json: 无法将 bool 解组到 Go 结构字段 PackageJSON.devDependencies

网站源码admin22浏览0评论

部署Firebase Typescript函数错误;解组 package.json: json: 无法将 bool 解组到 Go 结构字段 PackageJSON.devDependencies

部署Firebase Typescript函数错误;解组 package.json: json: 无法将 bool 解组到 Go 结构字段 PackageJSON.devDependencies

我正在尝试将云功能部署到 firebase,但收到以下错误消息。

Build failed: unmarshalling package.json: json: cannot unmarshal bool into Go struct field PackageJSON.devDependencies of type string;错误 ID:9f520bcf

这是我的index.ts

import * as functions from 'firebase-functions';
import retrievePositionData from './retrievePositionData';

const admin = require('firebase-admin');
admin.initializeApp();

export const fetchLocations = functions.pubsub
  .schedule('*/10 * * * *')
  .timeZone('America/Montreal')
  .onRun(retrievePositionData);

这是我拉取 JSON 写入 Firestore retrievePositionData.ts 的自定义函数。

import axios from "axios";
import { firestore } from 'firebase-admin';
import { Client, ElevationResponse } from "@googlemaps/google-maps-services-js";
import { config } from 'firebase-functions';

type SpotResponse = {
  response: {
    feedMessageResponse: {
      count: number,
      messages: {
        message: Array<{
          latitude: number,
          longitude: number,
          unixTime: number,
          messageType: string,
          messageContent: string,
          batteryState: string,
        }>,
      },
    },
    errors: Array<{}>,
  },
}

export default async () => {
  const client = new Client({});
  const FirestoreInstance = firestore();
  const feedID = '0u88e3hrgRoCDA4JEqkg41U1jhO25PbvW';
  let offset = 0;
  while (true) {
    const url = `.0/public/feed/${feedID}/message.json?start=${offset}`;
    const response = await axios.get<SpotResponse>(url)
    if (response.data.response.errors) {
      console.log('Reached the end of the feed. Stopping.');
      return;
    }
    const messages = response.data.response.feedMessageResponse.messages.message;

    while (messages.length > 0) {
      const message = messages.shift();
      if (!message) throw new Error('No more items in the queue');

      const query = await FirestoreInstance.collection('locationHistory').where('timestamp', '==', firestore.Timestamp.fromMillis(message.unixTime * 1000)).limit(1).get();
      if(!query.empty) {
        console.log('Found duplicate entry. Stopping.');
        return;
      }

      const elevationResponse: ElevationResponse = await client.elevation({
        params: {
          locations: [{ lat: message.latitude, lng: message.longitude }],
          key: config().maps.key,
        },
        timeout: 1000,
      });
      
      const formatedMessage: any = {
        timestamp: firestore.Timestamp.fromMillis(message.unixTime * 1000),
        location: new firestore.GeoPoint(message.latitude, message.longitude),
        messageType: message.messageType,
        messageContent: message.messageContent,
        batteryState: message.batteryState,
        elevation: elevationResponse.data.results[0].elevation,
      }
      Object.keys(formatedMessage).forEach(key => formatedMessage[key] === undefined && delete formatedMessage[key]);

      FirestoreInstance.collection('locationHistory').doc().create(formatedMessage)
        .then((value: firestore.WriteResult) => {
          console.log('Successfully inserted document', formatedMessage, 'at', value.writeTime);
        })
        .catch((reason: any) => {
          console.error('Could not insert document', reason);
        });
    }

    offset += response.data.response.feedMessageResponse.count;
  }
}

这是 package.json

{
  "name": "functions",
  "scripts": {
    "lint": "tslint --project tsconfig.json",
    "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": "10"
  },
  "main": "lib/index.js",
  "dependencies": {
    "@googlemaps/google-maps-services-js": "^3.1.4",
    "axios": "^0.19.2",
    "express": "^4.17.1",
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.1"
  },
  "devDependencies": {
    "tslint": "^5.12.0",
    "typescript": "^4.9.4",
    "firebase-functions-test": "^0.2.0",

    "private": true
  }
}
回答如下:

从 package.json 中删除这一行。它不是一个 devDependency,但你把它嵌套在那里:

    "private": true
发布评论

评论列表(0)

  1. 暂无评论