Node.js &引用;firebase服务“;在firebase中,函数未运行最新的更改

Node.js &引用;firebase服务“;在firebase中,函数未运行最新的更改,node.js,typescript,firebase,google-cloud-functions,firebase-cli,Node.js,Typescript,Firebase,Google Cloud Functions,Firebase Cli,我正在玩firebase函数。使用命令firebase deploy--only函数部署到firebase服务器时工作正常。不过,我当然希望在部署到服务器之前在本地测试我的功能。我看到运行firebase Service时,在本地“部署”的函数没有我在indext.ts中所做的最新更改,而是运行index.js中的最新构建版本 我的问题是,如何手动构建我的firebase功能项目,以便使用最新的更改在本地测试它们? firebase是否应该在本地部署项目之前自动构建该项目?对我来说,这听起来像一

我正在玩firebase函数。使用命令
firebase deploy--only函数部署到firebase服务器时工作正常。不过,我当然希望在部署到服务器之前在本地测试我的功能。我看到运行firebase Service时,在本地“部署”的函数没有我在indext.ts中所做的最新更改,而是运行index.js中的最新构建版本

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

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

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

Typescript项目设置:


如果要在运行
firebase Service
firebase functions:shell
时重新加载对TypeScript的更改,则只需使用初始化项目时为您创建的npm脚本重新构建项目(请参阅package.json):

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


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

firebase Service
似乎没有运行
npm build
。但是如果您查看
functions/package.json
,您可以看到已经有一个
service
脚本,它执行
npm run build&&firebase service——仅函数
。因此,如果你只是这样做:

cd functions
npm run serve

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

转到函数文件夹,打开
package.json
并添加新键:
“hotload”:“tsc--watch”

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


接下来,打开新的终端,转到主项目文件夹并运行
firebase服务
(并行运行托管+功能)或
firebase服务--仅功能

如果您正在寻找热重新加载,我只是按照以下方式执行:

"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

当我执行“firebase deploy”时,由firebase cli执行传输过程,但当我执行“firebase serve”以在本地运行函数时,则不执行传输过程。所以,我明白,应该有一个手动构建,或者在执行“firebase服务”命令时自动执行。“firebase服务”有时不会进行热重新加载更改,而是使用缓存数据。您是否尝试过清除浏览器窗口缓存或重新服务该命令。该命令与浏览器无关。我可以在IDE中看到index.js的旧版本。我不知道。等待更好的答案。同时,如果愿意,您可以备份项目并尝试迁移。没有伤害:)谢谢道格!!现在工作。这就是我要找的!。我试过使用
npm run build
,但之前我没有运行
cd函数。你必须每次都构建吗?或者你可以把它作为你的npm“service”脚本:
“service”:“npm run build&firebase模拟器:开始——仅函数&tsc——监视”
。(注意末尾添加了
&tsc--watch
。@Matthcw你测试过吗?对于新的
firebase init
项目,它对我不起作用。这个命令
firebase模拟器:start--only函数
仍然处于活动状态,因此
tsc--watch
永远不会执行。我已经尝试了
&
&
f
tsc--watch
。到目前为止,我发现我需要打开一个新的终端,并以某种方式运行
tsc--watch
。@这可能是您的操作系统和终端选择。我正在使用macOS Mojave v10.14.6和终端。使用single
&
对我来说很好。我从这里学到了这一点:使用上面的操作系统需要安装npm
同时
打包。
firebase emulators:start