如何在NPM脚本中动态获取并使用当前Firebase项目别名?
问题:NPM脚本中动态获取Firebase项目别名失败(MacOS Ventura)
我在MacOS Ventura系统上,想获取当前Firebase项目别名并在NPM脚本里使用。运行firebase use的终端输出如下:
Active Project: agentcake (agentcakeapp-b514b) Project aliases for /Users/BenJackGill/Dev/seoturbo/apps: * default (agentcakeapp-b514b) * agentcake (agentcakeapp-b514b) Run firebase use --add to define a new project alias.
我尝试把动态生成的"agentcake"赋值给$FIREBASE_ALIAS变量,写了这样的NPM脚本:
"scripts": { "start": "FIREBASE_ALIAS=$(firebase use | grep -o 'Active Project:.*' | cut -d ' ' -f 3) && icongenie generate -i src/assets/$FIREBASE_ALIAS/square-transparent-1024px-icon.png && cross-env ALIAS=$FIREBASE_ALIAS quasar dev", },
但执行脚本时,$FIREBASE_ALIAS被当作字面量字符串,没有解析成实际的别名"agentcake",执行输出如下:
FIREBASE_ALIAS=$(firebase use | grep -o 'Active Project:.*' | cut -d ' ' -f 3) && icongenie generate -i src/assets/$FIREBASE_ALIAS/square-transparent-1024px-icon.png && cross-env ALIAS=$FIREBASE_ALIAS quasar dev
解决方案
问题根源是NPM默认用sh执行脚本,和MacOS默认的zsh语法解析存在差异,同时变量引用的转义处理不当。以下是几种可行的解决办法:
方法1:强制用zsh执行脚本
修改NPM脚本,开头加上zsh -c,把整个命令用单引号包裹,避免sh错误解析变量:
"scripts": { "start": "zsh -c 'FIREBASE_ALIAS=$(firebase use | grep -o \"Active Project:.*\" | cut -d \" \" -f 3) && icongenie generate -i src/assets/$FIREBASE_ALIAS/square-transparent-1024px-icon.png && cross-env ALIAS=$FIREBASE_ALIAS quasar dev'" }
方法2:适配sh语法的变量提取逻辑
用awk替代grep+cut,语法更简洁且在sh中兼容性更好,确保变量能被正确引用:
"scripts": { "start": "FIREBASE_ALIAS=$(firebase use | awk '/Active Project:/ {print $3}') && icongenie generate -i src/assets/$FIREBASE_ALIAS/square-transparent-1024px-icon.png && cross-env ALIAS=$FIREBASE_ALIAS quasar dev" }
方法3:用独立shell脚本拆分逻辑
单独创建一个get-firebase-alias.sh脚本:
#!/bin/zsh FIREBASE_ALIAS=$(firebase use | grep -o 'Active Project:.*' | cut -d ' ' -f 3) icongenie generate -i src/assets/$FIREBASE_ALIAS/square-transparent-1024px-icon.png cross-env ALIAS=$FIREBASE_ALIAS quasar dev
给脚本添加执行权限:
chmod +x get-firebase-alias.sh
再修改NPM脚本调用这个文件:
"scripts": { "start": "./get-firebase-alias.sh" }
这种方式逻辑更清晰,彻底规避NPM脚本的转义和shell兼容问题。
内容的提问来源于stack exchange,提问作者TinyTiger
相关产品推荐
相关产品推荐

