首页 > 解决方案 > 根据 ps 或 bash 终端有条件地部署功能“预部署”

问题描述

我在一台带有 vscode 的 Windows 机器上,并从其中的 bash 终端运行命令。但是发现firebase deploy如果从 cmd 或 powershell 调用 cli 在我的机器上更稳定。有时会挂起 vscode.bash 或 gitbash 终端。

我在打字稿中有我的云功能,并且firebase deploy --only functions运行预部署脚本,例如npm run build

我已将我的 npm 构建脚本更改为,"build": "tsc && npm run copyKeys",以便它始终确保在部署之前复制对密钥的更改。密钥是部署期间使用的服务帐户密钥。

copyKeys 脚本"copyKeys": "cp -rf ./src/environments/service.acct.keys/ ./lib/environments/",在 bash 中运行良好。

但是我需要第二个 xcopyKeys4Win 脚本,以便在使用 powershell 时使用它,"xcopyKeys4Win": "XCOPY .\\src\\environments\\service.acct.keys .\\lib\\environments\\service.acct.keys /s /e /y /i"它可以很好地从 PS 中运行。

现在我的问题是当我调用时npm run deploy,这个调用firebase deploy --only functions运行调用 的firebase 预部署脚本,npm run build并且这个构建脚本被硬编码为... npm run copyKeys... npm run xcopyKeys4Win

我需要以某种方式有条件地调用“npm run deploy”,具体取决于是否需要 bash cp,例如在 mac/linux/vscode.bash/gitbash 上,或者如果使用 cmd 或 PS,则需要 xcopy。

例如,类似于 npm 构建脚本中的 firebase 托管目标设置或条件或其他东西,有人有什么想法吗?

标签: typescriptgoogle-cloud-functionsfirebase-tools

解决方案


ref: NPM 脚本中的跨平台管道命令

更改为"copyKeys": "node ./scripts/copy-keys.js"现在构建可以运行单个脚本。

复制键.js 是:

const fse = require('fs-extra');
const path = require('path');

const rootPath = path.resolve('./');
const sep = path.sep;
const head = `${rootPath}${sep}`;
const tail = `${sep}environments${sep}service.acct.keys`;

const src = `${head}src${tail}`;
const dest = `${head}lib${tail}`;

fse.copySync(src, dest);

所以不再需要 xcopyKeys4Win ...


推荐阅读