You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:19:54