#node.js #firebase
#node.js #firebase
Вопрос:
У меня возникли трудности с развертыванием функций Firebase из CI (а именно AWS CodeBuild) по неизвестным причинам.
firebase deploy
Команда вызывается с --token
аргументом, поэтому это не похоже на проблему с аутентификацией, фактически файлы хостинга развертываются без каких-либо проблем.
Одно из моих подозрений заключается в том, что когда я запускаю это локально, оно работает как шарм, и очевидное отличие заключается в той части, которая гласит package . (263 B) for uploading
, что, когда я запускаю его локально, у него намного больше, чем 263 байта (говорит local 69.23 MB
). ). Кроме того, поскольку он работает локально без каких-либо проблем, я не думаю, что есть какие-либо проблемы с firebase.json
неправильной настройкой.
Кто-нибудь сталкивался с подобной проблемой?
$ export DOTENV_RUNTIME=qa1 amp;amp; cross-env NODE_ENV=production firebase deploy --only hosting,functions --token $FIREBASE_TOKEN
...
i deploying functions, hosting
i functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i functions: ensuring required API cloudbuild.googleapis.com is enabled...
✔ functions: required API cloudbuild.googleapis.com is enabled
✔ functions: required API cloudfunctions.googleapis.com is enabled
i functions: preparing . directory for uploading...
i functions: packaged . (263 B) for uploading
✔ functions: . folder uploaded successfully
i hosting[project-xyz]: beginning deploy...
i hosting[project-xyz]: found 47 files in public
✔ hosting[project-xyz]: file upload complete
i functions: updating Node.js 12 function nextServer(us-central1)...
⚠ functions[nextServer(us-central1)]: Deployment error.
Build failed: function.js does not exist; Error ID: 7485c5b6
Functions deploy had errors with the following functions:
nextServer
To try redeploying those functions, run:
firebase deploy --only "functions:nextServer"
To continue deploying other features (such as database), run:
firebase deploy --except functions
Error: Functions did not deploy properly.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Вот содержимое некоторых соответствующих файлов конфигурации:
firebase.json
{
"hosting": {
"public": "public",
"rewrites": [
{
"source": "**",
"function": "nextServer"
}
]
},
"functions": {
"source": ".",
"ignore": [
".git/**",
".firebase/**",
".firebaserc",
"**/node_modules/**",
"**/public/**",
"**/src/**"
]
}
}
package.json
{
...
"main": "dist/server/index.js",
"engines": {
"node": "12"
},
...
}
Вот структура корневого каталога.
$ tree -v -L 1 -a
.
├── .firebase
├── .firebaserc
├── .git
├── .gitignore
├── README.md
├── dist
├── firebase.json
├── node_modules
├── package.json
├── public
├── src
└── yarn.lock
Комментарии:
1. Можете ли вы рассказать, как выглядит корневой каталог вашего проекта?
2. @nVitius Спасибо за ваш комментарий. Добавлена структура корневых каталогов.
3. Где вы определяете свои функции? Ваша конфигурация firebase настроена на использование
.
каталога для функций, но его нетindex.js
. Я считаю, что это может быть причиной проблемы.4. @nVitius Спасибо за ваш комментарий. Функции определены
dist/server/index.js
так, как указано вpackage.json
main
директиве. Учитывая ваш вклад, я попытался переместить index.js до корня, но никакой разницы не произошло, и размер упаковки по-прежнему кажется очень маленьким. Кроме того, я думаю, что deploy собирает этот файл без проблем, поскольку в журнале упоминается об этом:updating Node.js 12 function nextServer(us-central1).
(nextServer
это одна из функций, объявленных вdist/server/index.js
)
Ответ №1:
Я просмотрел исходный код firebase-tools и обнаружил, что при использовании AWS Code Build исходный код загружается и создается /codebuild/output/src123456789/src/github.com/...
. Если вы проигнорируете **/src/**
, никакие файлы не будут предназначены для развертывания, поскольку имя пути содержит src
. Это также объясняет, почему размер пакета был таким маленьким.
Спасибо @nVitius за вопросы.