【问题标题】:Cloud Functions Firebase CLI predeploy error (typescript)Cloud Functions Firebase CLI 预部署错误(打字稿)
【发布时间】:2018-05-25 04:09:14
【问题描述】:

我正在使用打字稿尝试 Cloud Functions。
安装成功后,添加触发器并测试部署。

index.ts

import * as functions from 'firebase-functions';

export const createAccount = functions.auth.user().onCreate(event => {
    const user = event.data;
    console.log('user displayname', user.displayName);
    return;
});

命令

firebase deploy --only functions

=== Deploying to 'project'...

i  deploying functions
i  functions: running predeploy script.

> functions@ build D:\vmbox\project\firebase\functions
> tslint -p tslint.json && ./node_modules/.bin/tsc

错误

'.' is not recognized as an internal or external command,
operable program or batch file.

环境
firebase cli v3.16.0
节点 v6.11.2
npm v4.2.0
操作系统:Windows 10
终端:powershell

///

回滚到 Javascript

我使用 Javascript 选项重新启动功能,但在部署时也出现错误。
我想这可能与 cli 为 typescript 所做的设置有关。
不得不删除添加到“firebase.json”中的“函数”选项。

firebase.json 中删除的选项:

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

【问题讨论】:

  • [解决方案移至评论][此功能的作者] 这看起来像是我们这边的一个错误。我们会尽快查看。尽管 ”。”和“/”都在 cmd.exe 中工作我怀疑这是因为 cmd.exe 可能需要额外的命令才能使某些东西可执行。需要一个 Windows 虚拟机来测试。

标签: typescript firebase google-cloud-functions firebase-tools


【解决方案1】:

确保当您初始化项目并要求您安装依赖项时,您选择是,我以为我必须手动编写依赖项,所以我通过了它,但它会为您完成。当我这样做时,一切正常。我不知道这是否与它有关,但我还删除了节点模块文件夹,并在同一文件夹中从 firebase init 重新启动。

【讨论】:

    【解决方案2】:

    将此行添加到函数文件夹中的 tsconfig:

    "typeRoots": [
      "node_modules/@types"
    ],
    

    这是“compilerOptions”块的一部分 为我工作

    【讨论】:

    • 不知道为什么这被否决了 - 这修复了打字稿找不到正确类型并破坏转译步骤的错误。
    【解决方案3】:

    抱歉耽搁了。安德鲁的回答会起作用,但它使该项目现在只能在 Windows 上运行。更多信息可以查看我的 GitHub 答案here。 TL;DR:

    将 package.json 中的脚本更改为:

      "scripts": {
        "lint": "./node_modules/.bin/tslint -p tslint.json",
        "build": "./node_modules/.bin/tsc"
      }
    

    将 firebase.json 中的 predeploy hook 更改为:

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

    【讨论】:

      【解决方案4】:

      只需替换 package.json 这个里面的

      "build": "./node_modules/.bin/tslint.cmd -p tslint.json && ./node_modules/.bin/tsc.cmd"
      

      关于这个

      "build": ".\\node_modules\\.bin\\tslint.cmd -p tslint.json && .\\node_modules\\.bin\\tsc.cmd"
      

      它可以在 Windows 上运行。

      【讨论】:

      • 这不是推荐的解决方案,因为这意味着您的定义现在可以在 Windows 上运行,但不能在其他操作系统上运行。请参阅我的其他答案。
      猜你喜欢
      • 1970-01-01
      • 2018-06-17
      • 2019-04-11
      • 2021-09-27
      • 2021-10-23
      • 2022-08-19
      • 2020-05-10
      • 2017-09-01
      • 2018-08-18
      相关资源
      最近更新 更多