Передача переменных среды в сценарии предустановки Firebase завершается неудачно - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь запустить сборку npm во время сценария предварительного развертывания хостинга.

Если я собирался запустить сборку из командной строки, я могу успешно запустить это:

set NUXT_ENV_GCLOUD_PROJECT=whatever&&npm run build

И это прекрасно работает. Но когда я пытаюсь сделать то же самое в следующем firebase.json файле, он просто пропускает сборку:

{
  "hosting": {
    "predeploy": ["set NUXT_ENV_GCLOUD_PROJECT=whatever&& npm run build"],
  }
}
> firebase deploy --only hosting

=== Deploying to 'xxx'...

i  deploying hosting
Running command: set NUXT_ENV_GCLOUD_PROJECT=whatever&& npm run build
+  hosting: Finished running predeploy script.
i  hosting[dev-phojo-app]: beginning deploy...
i  hosting[dev-phojo-app]: found 41 files in ./dist

сообщает , что он завершил выполнение сценариев предустановки, но в факт никогда не делал. Если я удалю настройку переменной среды, то она будет работать как положено (но, конечно, сборка завершится неудачно, потому что переменная среды не существует ..)

Что здесь происходит?

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Вместо использования выражения оболочки в firebase. json, я предлагаю поместить эти выражения в отдельный файл сценария и вызвать этот сценарий из ловушки предустановки. Итак, что-то вроде этого:

preploy. sh:

#!/bin/bash
export NUXT_ENV_GCLOUD_PROJECT=whatever
npm run build

firebase. json:

  "hosting": {
    "predeploy": [ "./predeploy.sh" ],
  }

Убедитесь, что preploy. sh является исполняемым: chmod a+x predeploy.sh

Я подозреваю, что интерфейс командной строки Firebase просто хочет "выполнить c" команду, которую вы даете, и что он не может содержать выражения оболочки, такие как &&.

0 голосов
/ 11 февраля 2020

Я работаю в windows, поэтому специфика немного отличается, но в действительности да, это сработало. Я сделал файл build.bat, и там я мог установить переменные окружения, которые затем были бы подобраны сценарием сборки npm.

Для тех, кто захочет последовать их примеру, это то, что я закончил с :

firebase. json

"hosting": {
    "predeploy": [ ".\\build.bat" ]
}

build.bat

echo off
2>NUL CALL :CASE_%GCLOUD_PROJECT%     # jump to :CASE_x, :CASE_y, etc.
IF ERRORLEVEL 1 CALL :DEFAULT_CASE    # If label doesn't exist

rmdir /s /q dist
npm run generate
EXIT /B

:CASE_dev-myapp-app
  echo Building for hosted development, %GCLOUD_PROJECT%
  set NUXT_ENV_GCLOUD_ENV=development
  set NUXT_ENV_GCLOUD_HOSTED=true
  GOTO END_CASE
:CASE_prod-myapp-app
  echo ============= PRODUCTION BUILD FOR %GCLOUD_PROJECT% ===================
  set NUXT_ENV_GCLOUD_ENV=development
  set NUXT_ENV_GCLOUD_HOSTED=true
  GOTO END_CASE
:DEFAULT_CASE
  ECHO Unknown Google Cloud project "%GCLOUD_PROJECT%"
  exit 666
:END_CASE
  VER > NUL # reset ERRORLEVEL
  GOTO :EOF # return from CALL

Произойдет сбой, если входящая переменная GCLOUD_PROJECT не установлена. Он потерпит неудачу, если для него задан нераспознанный проект. И он потерпит неудачу, если команда npm завершится неудачей.

...