【问题标题】:Can not transpile ES7 "includes" feature with Cloud Functions无法使用 Cloud Functions 转换 ES7“包含”功能
【发布时间】:2018-05-22 08:28:12
【问题描述】:

我正在尝试在 VueJS 项目中使用 Typescript,该项目有一个子目录 functions 供云函数在服务器端执行。

我想使用 ES2017 功能 Array.prototype.includes,我想我可以通过将以下 tsconfig.json 添加到我的 函数 来实现这一点目录:

{
  "compilerOptions": {
    "lib": ["es2016", "es2017"],
    "target": "es6",
    "module": "es2015",
    "moduleResolution": "node",
    "sourceMap": true,
    "strict": true
  }
}

如果我进入 functions 目录并运行 tsc 转译器,它运行时不会出错。我的 vs-code 编辑器也没有突出使用“包含”的任何问题。但是,按照 Firebase 文档中的建议配置,我已将以下内容添加到我的 firebase.json 配置文件中:

"functions": {
  "predeploy": "npm --prefix functions run build"
}

反过来,我在 functions 目录中的 package.jsonbuild 脚本列为:

"scripts": {
  "build": "tslint *.ts && tsc *.ts"
},

但是当我运行 firebase deploy --only functions 时,它会正确运行 build 脚本,但随后会出现以下错误:

index.ts(44,31):错误 TS2339:“string[]”类型上不存在属性“includes”。

我相信这可能会发生,因为它错误地使用了根项目目录(也就是 VueJS 正在使用的那个)中的 tsconfig.json 而不是 functions 目录中的那个,但我'不完全确定。

我可以通过将构建命令更改为:

"build": "tslint *.ts && tsc *.ts --lib 'es7'"

这确实有效,但它让我觉得我已经破解了一点。谁能指出更好的答案?

【问题讨论】:

    标签: typescript firebase google-cloud-functions


    【解决方案1】:

    原因是当您使用tsc *.ts 将输入文件指定给tsc 时,tsconfig.json 文件将被忽略。

    来自documentation

    在命令行中指定输入文件时,tsconfig.json 文件被忽略。

    要修复此问题,请运行 tsc 而不使用任何参数。这将使用您的 tsconfig.json 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 2019-04-07
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多