如何解决 Cloud Functions 项目中的新 ESLint 错误?
Posted
技术标签:
【中文标题】如何解决 Cloud Functions 项目中的新 ESLint 错误?【英文标题】:How do I resolve new ESLint errors in my Cloud Functions project? 【发布时间】:2018-07-02 15:38:57 【问题描述】:又一个关于 Firebase 的问题:
我对 Firebase/node.js/npm 比较陌生...
我目前正在尝试使用 Firebase 为一个大学项目构建移动应用后端。我在本地使用 node.js 和 编写,而不是测试我的函数,然后我使用 Firebase CLI 和“firebase deploy”部署它们。 一切都很顺利,直到我像一小时前一样开始工作。我的代码中有一个小错误,我很容易修复。在同一个“部署周期”中,Firebase CLI 向我展示了 firebase-tools 的可用更新,建议我使用
npm install -g firebase-tools
这就是我所做的,也是我的悲剧开始的地方。 CLI 然后建议卸载/重新安装
npm uninstall -g @google-cloud/functions-emulator
npm install -g @google-cloud/functions-emulator
所以我做到了。 然后我尝试部署我的函数(来自本地 index.js)并收到以下警告:
错误:Firebase 配置变量不可用。请使用最新版本的 Firebase CLI 部署此功能
我使用npm install -g firebase-tools
来更新firebase CLI,但没有任何改变。
我认为备份我的旧项目并在新文件夹中初始化一个新项目并将其连接到我现有的 FB-Project 并复制粘贴我的旧 index.js 的内容是个好主意到新项目文件夹中的那个。 在尝试部署这个新项目时,我收到了大量关于我的代码的错误和警告,例如:
18:4 error Expected catch() or return promise/catch-or-return
还有更多,尽管我之前的编码函数运行良好。
所以我决定最好尝试修复旧项目的错误。
有没有人建议在这种情况下该怎么做,或者在哪里可以找到这些神秘的 firebase 配置变量?我无法在网上找到任何解决我的问题的方法。 我真的很感谢任何形式的帮助支持,因为我不知道该怎么做,而且我的大学也没有支持我这样做......
【问题讨论】:
【参考方案1】:关于配置变量的错误消息要求您更新您的 Firebase CLI,而您也这样做了。这很好。 (您可以忽略有关 @google-cloud/functions-emulator 的警告。)
当您创建一个新项目时,您可能会在项目创建过程中选择使用 ESLint。提示会说:
您想使用 ESLint 来捕获可能的错误并强制执行样式吗?
这是自 3.17.0 版以来 Firebase CLI 中的一项非常新的功能,您之前可能没有使用 ESLint。
您看到的那些新错误是 ESLint 告诉您您的代码存在潜在问题。 Firebase 团队强烈建议您听取这些警告和错误的建议并加以解决,以减少您的代码出现的问题。
如果你现在根本不能使用 ESLint,你可以重新创建你的项目,但是当它提示你时选择 not 使用 ESLint。或者,您可以在当前项目中通过编辑 firebase.json
文件并删除运行 lint 命令的预部署脚本来禁用它。
【讨论】:
!!而已。出于某种原因,我的大脑决定让 ESLint 捕获可能的错误并强制执行样式是一个好主意,但不知道这会导致即将出现的错误/警告。我建立了一个新项目并将其与我现有的 fb-project 连接起来,我终于能够再次部署这个新本地项目中的功能。以更健壮的方式修改我的函数并使用 try/catch 是我将在不久的将来重点关注的事情,但现在重要的是,我可以工作并且我们可以测试我们的前端。谢谢你的回答,真的很有帮助! 我尝试删除预部署脚本,它工作正常。只是想问我是否应该在发布之前解决 eslint 错误?它们是标识和换行错误 我只想让它自动修复所有样式问题【参考方案2】:那里似乎发生了两件事:
1) 您可能没有最新的 firebase-functions,这就是导致配置变量错误的原因。在再次部署之前尝试在您的函数文件夹中运行以下命令:
npm i --save firebase-functions@0.8.1
npm i --save firebase-admin@5.8.1
2) “预期的 catch() 或返回”是一个 linter 错误,表示您没有返回您的承诺链。 (这将导致您部署的函数出现超时错误)。所以你应该修改你的代码看起来更像:
return asynchronousTask().then(function()
....
return someValue;
);
【讨论】:
如果我尝试在我的项目文件夹中更新 firebase-functions 和 firebase-admin,CLI 总是会尝试读取位于我的配置文件文件夹中的 package.json 文件,但唯一存在的是包-lock.json。然而,在我的项目文件夹中,存在一个名为 package.json 的文件。我需要更改“更新命令”中的目录吗?我正在项目文件夹的终端中运行命令。 抱歉,我不能再编辑第一条评论了。我找到了 Dougs 回答的短期解决方案,但如果您对我的第一条评论发表意见,以便更多地了解 firebase/node.js 的工作实践,仍然会很高兴。我在我的函数中使用异步函数,以确保不会发生超时错误。在此先感谢劳伦!很想给你一个upvote,但不幸的是我丢失的声誉点不允许我......【参考方案3】:在某些情况下,您可能想全部认输,但只想暂时忽略掉毛,直到您解决它所遇到的问题。
https://masteringjs.io/tutorials/eslint/ignore#:~:text=Disabling%20ESLint%20With%20a%20Comment&text=If%20you%20put%20%2F*%20eslint,the%20top%20of%20a%20file.
使用.eslintignore
可以跳过整个文件,这些文件可能尚未准备好通过 eslint,但您仍需要部署以进行测试或不需要。
【讨论】:
以上是关于如何解决 Cloud Functions 项目中的新 ESLint 错误?的主要内容,如果未能解决你的问题,请参考以下文章
一个项目中的多个 Spring Cloud Functions 用于在 AWS Lambda 上部署
如何从 Cloud Function 调用其他 Cloud Firebase Functions
如何使用 Google Cloud SDK 列出所有 Cloud Functions?
如何使用 Cloud Functions for Firebase 更新 Firebase 实时数据库中的值