"firebase serve" 在 firebase 函数中不是 运行 最新的变化

"firebase serve" in firebase functions is not running the latest changes

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

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

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

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

Migrating an existing JavaScript Cloud Functions project

打字稿项目设置:

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

cd functions
npm run build

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

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

firebase serve好像不是运行npm build。但是,如果您查看 functions/package.json,您会发现那里已经有一个执行 npm run build && firebase serve --only functionsserve 脚本。所以如果你这样做:

cd functions
npm run serve

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

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

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

接下来,打开新终端,转到主项目文件夹和 运行 firebase serve(并行 运行 hosting+functions)或 firebase serve --only functions

如果您正在寻找热重装,我只是像下面那样做:

"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 serve 命令时只需使用此命令

firebase emulators:start