我正在使用Firebase函数。使用命令firebase deploy --only functions
部署到Firebase服务器时,工作正常。但是,我当然想在部署到服务器之前在本地测试我的功能。我看到运行firebase服务的是,在本地“部署”的功能没有我在indext.ts中所做的最新更改-正在运行上次构建的版本,即在index.js中。
我的问题是,如何手动构建Firebase函数项目以使用最新更改在本地对其进行测试?
firebase serve
是否应该在本地部署项目之前自动构建项目?对我来说,这听起来像是个错误。
答案 0 :(得分:6)
如果要在运行firebase serve
或firebase functions:shell
时将更改重新加载到TypeScript中,您要做的就是使用初始化项目时为您创建的npm脚本再次构建项目。 (请参阅package.json):
cd functions
npm run build
这会将您的TypeScript转换为JavaScript,并且仿真器会自动提取对JavaScript的更改。
此外,如果您是TypeScript的高级用户,则可以在源文件在磁盘上更改时运行tsc --watch
自动将TS编译为JS。您可以了解有关in this blog的更多信息。
答案 1 :(得分:3)
firebase serve
似乎没有运行npm build
。但是,如果您查看functions/package.json
的内部,可以看到那里已经有一个执行serve
的{{1}}脚本。因此,如果您这样做:
npm run build && firebase serve --only functions
您可以构建和使用,而不必执行两个单独的命令。
答案 2 :(得分: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,这将帮助您提高开发速度
答案 3 :(得分:1)
我认为您不能在初始化的项目中在Javascript和Typescript之间切换。 Typescript的设置与Javascript有点不同。您将需要将Javascript项目迁移到Typescript。
要将您的项目从JS迁移到TS,请遵循以下firebase-functions文档:
Migrating an existing JavaScript Cloud Functions project
打字稿项目设置:
答案 4 :(得分:0)
这是怎么做的:
转到功能文件夹,打开package.json
并添加新密钥:"hotReload": "tsc --watch"
下一步,在相同的功能文件夹中运行npm run hotReload
,并使终端保持打开状态。每当对* .ts文件进行任何更改时,这都会更新* .js。请记住,云功能是从* .js文件而不是* .ts文件运行的。因此,*。ts文件需要首先编译为* .js。
接下来,打开新终端,转到主项目文件夹,然后运行firebase serve
(以并行运行托管功能)或firebase serve --only functions