Firebase函数部署异常:lib/index.js无法更新仍保留旧版本
我碰到不少开发者遇到过这个棘手的问题——首次部署正常,但后续更新代码后,lib/index.js就是死活不跟着变,部署上去的还是旧版本。下面是最常见的几个原因和对应的解决办法:
编译步骤遗漏或未生效
大多数Firebase Functions项目用TypeScript开发,需要先把.ts文件编译成JavaScript输出到lib目录。如果你修改了源码但没重新执行编译,lib里的文件自然还是旧的。
解决办法:先运行npm run build(或者直接执行tsc),确认lib/index.js的修改时间是最新的,再执行部署。更省心的方式是把编译和部署合并成一条命令:npm run build && firebase deploy --only functions。Firebase CLI缓存了旧文件
Firebase CLI有时候会缓存之前部署的文件内容,哪怕你本地的lib目录已经更新,它还是会上传缓存里的旧版本。
解决办法:部署时加上--no-cache参数强制跳过缓存,命令改成:firebase deploy --only functions --no-cache。如果还是不行,可以尝试删除本地Firebase缓存目录(一般在用户主目录下的.firebase文件夹),然后重新部署。firebase.json配置有误
检查你的firebase.json文件,看看Functions的配置是不是有问题:- 确认
source字段指向的是正确的函数目录(比如"source": "functions"),确保lib目录在这个路径下; - 检查
ignore列表,别把lib目录加进去了——如果lib被忽略,部署时CLI会跳过它,自然不会上传新文件。
示例正确配置:
"functions": { "source": "functions", "ignore": [ "node_modules", ".git", "firebase-debug.log" ] }- 确认
本地文件未真正更新
有时候是编辑器没保存源码文件,或者lib/index.js存在权限问题(比如变成只读)导致编译后的内容没写入成功。
解决办法:手动打开lib/index.js看看内容是不是最新的;检查文件权限,确保当前用户有写入权限;确认编辑器已经保存了所有修改的.ts文件再执行编译。函数版本/别名冲突
如果你给函数创建了版本或者别名,可能部署时默认推送到了别名,但触发的还是旧版本的函数。不过这种情况比较少见,但也可以排查一下。
解决办法:用firebase functions:list查看当前部署的函数版本和别名,确认你部署的版本是正在被使用的那个。
内容的提问来源于stack exchange,提问作者siebmanb

