firebase 函数中的“firebase serve”未运行最新更改

Posted

技术标签:

【中文标题】firebase 函数中的“firebase serve”未运行最新更改【英文标题】:"firebase serve" in firebase functions is not running the latest changes 【发布时间】:2018-12-27 05:32:21 【问题描述】:

我正在使用 firebase 功能。使用命令firebase deploy --only functions 部署到 Firebase 服务器时工作正常。但是,我当然想在部署到服务器之前在本地测试我的功能。我在运行 firebase serve 时看到的是,在本地“部署”的函数没有我在 indext.ts 中所做的最新更改 - 正在运行 index.js 中的最后一个构建版本。

我的问题是,我如何手动构建我的 firebase 函数项目以使用最新更改在本地测试它们? firebase serve 应该在本地部署之前自动构建项目吗?对我来说,这听起来像是一个错误。

【问题讨论】:

【参考方案1】:

当你第一次使用 npm serve 命令时,只需使用这个命令

firebase emulators:start

【讨论】:

【参考方案2】:

如果您正在寻找热重载,我只是这样做:

"start:emulators": "firebase emulators:start --only functions",
"ts:watch": "tsc --watch",
"dev": "concurrently --kill-others \"npm run start:emulators\" \"npm run ts:watch\"",

它将同时运行 firebase 和 ts watch,这将有助于您的开发速度

【讨论】:

要使用上述需要安装npm concurrently pacakage。【参考方案3】:

转到函数文件夹,打开package.json并添加新密钥:"hotReload": "tsc --watch"

接下来,在同一功能文件夹中运行npm run hotReload 并保持终端打开。每当*.ts 文件发生任何更改时,这都会更新*.js。请记住,云函数从 *.js 文件而不是 *.ts 文件运行。因此,*.ts 文件需要先编译为*.js

接下来,打开新终端,进入主项目文件夹并运行firebase serve(并行运行托管+功能)或firebase serve --only functions

【讨论】:

【参考方案4】:

firebase serve 似乎没有运行npm build。但是如果您查看functions/package.json 内部,您会看到那里已经有一个执行npm run build && firebase serve --only functionsserve 脚本。所以如果你这样做:

cd functions
npm run serve

您无需执行两个单独的命令即可构建和服务。

【讨论】:

【参考方案5】:

如果您想在运行 firebase servefirebase functions:shell 时重新加载对 TypeScript 的更改,您所要做的就是使用初始化项目时为您创建的 npm 脚本再次构建您的项目(请参阅 package.json)。 json):

cd functions
npm run build

这会将您的 TypeScript 转换为 javascript,并且对 JavaScript 的更改将被模拟器自动获取。

另外,如果您是更高级的 TypeScript 用户,您可以运行tsc --watch 以在磁盘上的源文件发生更改时自动将 TS 编译为 JS。你可以阅读更多关于in this blog的信息。

【讨论】:

谢谢道格!!现在工作。毫无疑问,这就是我要找的!我尝试使用npm run build,但我之前错过了运行cd functions 而且你每次都要构建? 或者你可以把它作为你的 npm“服务”脚本:"serve": "npm run build && firebase emulators:start --only functions & tsc --watch"。 (注意最后添加& tsc --watch @Matthcw 你测试了吗?新的firebase init 项目对我不起作用。这个命令firebase emulators:start --only functions 仍然有效,所以tsc --watch 永远不会被执行。我在tsc --watch 前面试过&&&。到目前为止,我发现我需要打开一个新终端并以某种方式运行tsc --watch @Ash 这可能是您的操作系统和终端选择。我正在使用 macOS Mojave v10.14.6 和终端。使用单个 & 对我来说效果很好。我是从这里学到的:bashitout.com/2013/05/18/Ampersands-on-the-command-line.html【参考方案6】:

我不认为您可以在初始化项目中在 Javascript 和 Typescript 之间切换。 Typescript 的设置与 Javascript 有点不同。您需要将 Javascript 项目迁移到 Typescript。

要将您的项目从 JS 迁移到 TS,请遵循以下 firebase-functions 文档:

Migrating an existing JavaScript Cloud Functions project

Typescript 项目设置:

【讨论】:

当我执行“firebase deploy”时,转译过程由firebase cli执行,而不是当我执行“firebase serve”在本地运行函数时。所以,我知道,应该有一个手动构建,或者在执行“firebase serve”命令时自动构建。 'firebase serve' 有时不会热重载更改,而是使用缓存数据。您是否尝试过清除浏览器窗口缓存或重新提供命令。 与浏览器无关。我可以在 IDE 中看到旧版本的 index.js。 不认识老兄。只是等待一个更好的答案。同时,您可以备份您的项目并根据需要尝试迁移。没有伤害:)

以上是关于firebase 函数中的“firebase serve”未运行最新更改的主要内容,如果未能解决你的问题,请参考以下文章

如何从firebase函数中的firebase存储中获取图像的尺寸?

firebase.storage() 不是 JavaScript 中的函数

从android中的firebase函数接收json数据给出空值

Firebase 函数中的 CORS

在 React-Native 中的非异步函数中调用异步函数 - Firebase

如何在 React Native 中的 firebase 服务函数成功后运行回调函数