Firebase配置中两种npm --prefix run lint命令差异及替换原因
命令说明与替换原因解析
原命令npm --prefix \"RESOURCE_DIR\" run lint的作用
这是Firebase CLI初始化开启了linter配置的云函数项目时,自动生成的部署前钩子默认命令,各部分逻辑拆解开很简单:
npm run lint:执行项目package.json里scripts字段定义的lint脚本,本质就是跑你配置的ESLint这类代码检查工具,扫描代码里的语法错误、不符合规范的写法--prefix <路径>:npm自带的参数,用来指定npm命令的运行工作目录,不用手动敲cd切目录,就能直接在指定路径下执行对应脚本RESOURCE_DIR是Firebase CLI预留的占位符变量,设计初衷是在部署执行阶段自动替换成你项目里云函数代码的实际存储路径,默认初始化的项目这个路径就是根目录下的functions文件夹。
整条命令的预期逻辑是:每次跑firebase deploy部署云函数前,自动定位到云函数代码目录执行代码检查,只有检查全过才会走后续部署流程,避免把有问题的代码传到线上。
替换为npm --prefix functions run lint的原因
带占位符的默认命令设计逻辑没问题,但实际用的时候经常报错,替换成写死functions路径的命令主要是为了绕开兼容问题:
- 不少版本的Firebase CLI都存在占位符替换失效的bug,执行predeploy钩子的时候根本不会替换
RESOURCE_DIR变量,直接把这个字符串当真实目录名查找,必然会报「路径不存在」的错误,导致lint流程失败、部署直接中断 - 只要你初始化云函数项目的时候没有自定义代码存储路径,默认就是根目录下的
functions文件夹,直接写死路径没有任何适配问题,反而能避开不同版本CLI的变量替换bug,稳定性高很多。
修改完成后firebase.json的完整配置如下:
{ "functions": { "predeploy": [ "npm --prefix functions run lint" ] } }
如果你初始化项目的时候自定义过云函数代码的存储目录,不要直接照搬这个配置,把路径里的
functions换成你自己的实际目录名就行。
内容的提问来源于stack exchange,提问作者Eshaan Gupta
相关产品推荐
相关产品推荐

