Условно firebase развертывает функции 'предустановки' в зависимости от терминала ps или bash.
Я на Windows-машине с vscode и запускаю команды из терминала bash внутри него. Однако обнаружили, что firebase deploy
Cli более стабильно на моей машине, если вызывается из cmd или powershell. Иногда зависает с 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, или xcopy, если используется cmd или PS.
Например, что-то похожее на настройку цели хостинга firebase или условие в сценарии сборки npm, или еще что-нибудь, у кого-нибудь есть идеи?
1 ответ
ref: Команда кроссплатформенного канала в сценарии NPM
изменился на "copyKeys": "node ./scripts/copy-keys.js"
так что build сейчас может запускать один скрипт.
copy-keys.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 ...