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,这将有助于您的开发速度
【讨论】:
要使用上述需要安装npmconcurrently
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 functions
的serve
脚本。所以如果你这样做:
cd functions
npm run serve
您无需执行两个单独的命令即可构建和服务。
【讨论】:
【参考方案5】:如果您想在运行 firebase serve
或 firebase 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数据给出空值