首页 > 编程问答 >Firebase 功能无法正确构建

Firebase 功能无法正确构建

时间:2024-07-19 12:35:03浏览次数:13  
标签:javascript typescript firebase function google-cloud-functions

我只是想使用打字稿构建一个 firebase 函数。现在我的文件如下:

import { onRequest } from "firebase-functions/v2/https";
import * as logger from "firebase-functions/logger";

import * as admin from "firebase-admin";

admin.initializeApp();

// Start writing functions
// https://firebase.google.com/docs/functions/typescript

export const helloWorld = onRequest((request, response) => {
  logger.info("Hello logs!", { structuredData: true });
  response.send("Hello from Firebase!");
});

这是我的 tsconfig:

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "outDir": "lib",
    "sourceMap": true,
    "strict": true,
    "target": "es2017"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}

以及添加的措施 package.json

{
  "name": "functions",
  "scripts": {
    "build": "tsc",
    "build:watch": "tsc --watch",
    "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": "18"
  },
  "main": "lib/index.js",
  "dependencies": {
    "firebase-admin": "^12.1.0",
    "firebase-functions": "^5.0.0"
  },
  "devDependencies": {
    "typescript": "^4.9.0",
    "firebase-functions-test": "^3.1.0"
  },
  "private": true
}

现在,有趣的部分。当我运行时

tsc index.ts

我收到以下错误消息

../node_modules/gaxios/build/src/gaxios.d.ts:6:5 - error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.

6     #private;
      ~~~~~~~~

../node_modules/google-auth-library/build/src/auth/awsclient.d.ts:84:5 - error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.

84     #private;
       ~~~~~~~~

../node_modules/google-auth-library/build/src/util.d.ts:134:5 - error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.

134     #private;
        ~~~~~~~~

../node_modules/gtoken/build/src/index.d.ts:38:5 - error TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.

38     #private;
       ~~~~~~~~


Found 4 errors in 4 files.

Errors  Files
     1  ../node_modules/gaxios/build/src/gaxios.d.ts:6
     1  ../node_modules/google-auth-library/build/src/auth/awsclient.d.ts:84
     1  ../node_modules/google-auth-library/build/src/util.d.ts:134
     1  ../node_modules/gtoken/build/src/index.d.ts:38

我不知道我做错了什么。这以前从来不是问题。该代码正在一个独立的文件夹中运行,因此它不会干扰其他依赖项。请有人帮忙。


错误消息表明正在尝试使用 TypeScript 中的私有标识符,但的目标是 ECMAScript 版本低于支持私有标识符的版本。

问题:

tsconfig.json 文件中将 target 设置为 es2017 。但是,正在使用的某些依赖项( gaxios google-auth-library gtoken )使用了私有标识符,这些标识符在 ECMAScript 2015 及更高版本中才可用。

解决方案:

需要将 tsconfig.json 文件中的 target 选项更新为 es2015 或更高版本,以支持私有标识符。

{
  "compilerOptions": {
    // ... other options
    "target": "es2020" // 或更高版本,例如 "esnext"
  }
}

解释:

target 选项告诉 TypeScript 编译器要生成哪个版本的 JavaScript 代码。将 target 设置为较旧的 ECMAScript 版本(例如 es5 es2015 )将导致编译器生成与那些版本兼容的代码,但不包括对较新 JavaScript 功能的支持,例如私有标识符。

其他建议:

  • 确保使用的所有依赖项都与选择的 target ECMAScript 版本兼容。
  • 运行 npm install 以确保所有依赖项都已安装并更新。
  • 考虑使用 ts-node ts-node-dev 在开发过程中运行 TypeScript 代码,因为它会自动处理编译过程。

完成这些更改后,再次运行 tsc index.ts 命令,应该不会再遇到此错误。

标签:javascript,typescript,firebase,function,google-cloud-functions
From: 78767536

相关文章

  • JavaScript 异步编程
    0x01概念说明与基本使用Promise是在ES6中引入的类,用于更好地编写复杂的异步任务在ES6之前的异步请求的处理方案中,通常通过传递回调函数的方式处理请求结果,由于各个请求对回调函数不统一,每次请求时都需要查看相应的源码,造成效率低下,因此需要约定共同的标准,即Promise类......
  • 【Azure Function】发布 Python Function 到 Azure 成功,但是无法显示Function列表
    问题描述发布PythonFunction到AzureFunctionApp服务,发布成功后,在Overview页面却无法查看到这个Function,进入Kudu站点,查看FunctionLog,发现错误信息为:"module not found" error:"FailureException:ImportError:libpq.so.5:cannotopensharedobjectfile:Nosuchf......
  • Error: Expected ref to be a function, a string, an object returned by React.crea
    1、完整报错:Error:Expectedreftobeafunction,astring,anobjectreturnedbyReact.createRef(),ornull.atcoerceRef(react-dom.development.js:14873:1)atreconcileSingleElement(react-dom.development.js:15723:1)atreconcileChildFibers(re......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript美食网站(西餐)
    HTML+CSS+JS【美食网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • java8四个函数式接口:Function, Predicate, Consumer, Supplier使用
    目录1、前言2. 四大函数式接口1.Function,>2.Predicate 3.Consumer4.Supplier1、前言Java8引入了一种新的接口特性,叫做函数式接口。这种接口只能有一个抽象方法,通常用注解@FunctionalInterface标识。函数式接口可以被隐式地转换为lambda表达式。以下是一个......
  • 如何在 Vue 和 JavaScript 中截取视频任意帧图片
    如何在Vue和JavaScript中截取视频任意帧图片大家好!今天我们来聊聊如何在Vue和JavaScript中截取视频的任意一帧图片。这个功能在很多场景下都非常有用,比如视频编辑、视频预览等。本文将带你一步步实现这个功能,并且会提供详细的代码示例。准备工作首先,我们需要一个Vue......
  • njs最详细的入门手册:Nginx JavaScript Engine
    原文链接:https://hi.imzlh.top/2024/07/08.cgi关于njs首先,njs似乎在国内外都不受关注,资料什么的只有官网参考手册,出了个问题只能看到GithubIssue所以,这篇文章将我的探索过程展示给大家,njs对于可用存储空间较小的设备真的很友好,相比较于NodeJS、Deno这种80M起步的运行环境真的......
  • 编程世界的对决:JavaScript vs Java
    在编程领域,Java和JavaScript这两门语言各有千秋。它们不仅在语法上有着明显的区别,在编程理念、表现力、类型转换以及代码的易读性和复杂性方面也有着巨大的差异。本文将深入探讨JavaScript相较于Java的优势,以及两者在代码风格和开发体验上的不同。1.表现力的对比1.1JavaScr......
  • TS 入门(七):TypeScript模块与命名空间
    目录前言回顾泛型编程1.模块a.导入和导出b.默认导出c.重命名导入和导出2.命名空间a.定义命名空间b.嵌套命名空间3.动态导入与条件导入a.动态导入b.条件导入结语前言在前几章中,我们学习了TypeScript的基础知识、函数与对象类型、接口与类、以及泛型编......
  • 常用的 JavaScript 数组处理方法
    1.map方法用于创建一个新数组,其结果是该数组中的每个元素调用一个提供的函数后返回的结果。letitems=[{id:1,name:'item1'},{id:2,name:'item2'},{id:3,name:'item3'}];letitemNames=items.map(item=>item.name);console.log(itemNames);......