firebase-tools :
[email protected]
ํ๋ซํผ:
๋งฅ OS
๋งฅ OS, ๋ ธ๋ 10.15.3, [email protected]
Firebase ์ฝ์์ ๋ ๊ฐ์ ํธ์คํ
์ฌ์ดํธ๋ฅผ ๋ง๋ญ๋๋ค.
์ด์
'firebase target : apply hosting dev firebase-hosting-id'
์ด์
'firebase deploy --only hosting : dev '
๋ฐฐํฌ ์ฑ๊ณต
[info] Project Console: https://console.firebase.google.com/project/project-name/overview
[debug] [2019-05-01T19:12:12.726Z] TypeError: Cannot read property 'deploys' of undefined
at /Users/reeda/.nvm/versions/node/v10.15.3/lib/node_modules/firebase-tools/lib/deploy/index.js:88:36
at process._tickCallback (internal/process/next_tick.js:68:7)
[error]
[error] Error: An unexpected error has occurred.
์ต๊ทผ์ด ํ๋ฆ์ ์ฝ๊ฐ์ ์กฐ์ ์ด์์์ต๋๋ค. ์ด ์ค๋ฅ๋ ์์ค์์ ๋ฐ์ํฉ๋๋ค. https://github.com/firebase/firebase-tools/blob/master/src/deploy/index.js#L111
@Memeriaj ์ต๊ทผ์์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ฉด์ ์ดํด๋ณผ ์ ์์ต๋๊น?
์ฌ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ ๊ฒ ๊ฐ์์. firebase.json
๊ตฌ์ฑ ํ์ผ์ "target": "dev"
์ด ์์ต๋๊น? hosintg:dev
์ ์ผ์นํ์ง ์๋ ๋ชจ๋ ๊ตฌ์ฑ์ ๊ฑธ๋ฌ ๋ด๊ณ ๋น ๋ฐฐ์ด์ด ๋จ์๋ค ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋น ์ด๋ ์ด์ ๋ํ ๋ชจ๋ ๋ฐฐํฌ ๋จ๊ณ๋ฅผ ์ํํ์ฌ ํจ๊ณผ์ ์ผ๋ก ์๋ฌด๊ฒ๋ ์ํํ์ง ์์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ง์ง๋ง์ ์ฝ์ ๋งํฌ์ ์๋ก ๋ฐฐํฌ ๋ ํธ์คํ
์ฌ์ดํธ์ ๋ํ ๋งํฌ๋ฅผ ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์์ ์ค์ ๋ก ์๋ฌด๊ฒ๋ ๋ฐฐํฌํ์ง ์์๊ธฐ ๋๋ฌธ์์ด ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
์ด ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ์๋ฌด๊ฒ๋ ๋ฐฐํฌํ์ง ์๋๋ค๋ ๊ฒ์ ์ค๋ช ํ๋ ์ ์ ํ ์ค๋ฅ๊ฐ ํ์ํฉ๋๋ค.
(๋ฌธ์ ์ ๊ด๋ จ์ด ์์ : ์ผ๋ฐ์ ์ผ๋ก ๋์ผํ ํ๋ก์ ํธ ๋ด์ ๋ค๋ฅธ ํธ์คํ
์ฌ์ดํธ๊ฐ ์๋ Firebase ํ๋ก์ ํธ ์์ค ๊ธฐ๋ฐ์ผ๋ก ํ๊ฒฝ ์์ค ์ ํ์ ์ํฉ๋๋ค (๋ธ๋ก๊ทธ ์ฉ ์ฌ์ดํธ, ์น ์ฑ์ฉ ์ฌ์ดํธ, ๋์ผํ ํ๋ก์ ํธ์ ์๋ก ๋ค๋ฅธ ํธ์คํ
์ฌ์ดํธ์์ ๋์ผํ ํ๊ฒฝ์์๋ ๋ฌธ์ ์ฉ ์ฌ์ดํธ). ์ด๋ ์ฃผ๋ก Firebase Auth์ ๊ฐ์ ํญ๋ชฉ์ด ํ๋ก์ ํธ ๋ด์์ ๋จ์ผ ์ธ์คํด์ค ๋ง ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด์์ ์ผ๋ก๋ firebase.json
ํ์ผ์ firebase use dev
, firebase deploy
์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ค์ ํ๊ณ , ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด dev๋ฅผ ํ์ธํฉ๋๋ค. firebase use staging
, firebase deploy
, ...)
{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"hosting": {
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
},
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
]
}
}
์ธ๊ธ ํ ๊ตฌ์ฑ์ firebase json ํ์ผ์ด ์๋ firebase bashrc ํ์ผ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
firebase deploy --only hosting:dev
์ด ์๋ํ๋ ค๋ฉด firebase.json ํ์ผ์ ํธ์คํ
์น์
์ "target": "dev"
์ด ์์ด์ผํฉ๋๋ค. --only
ํ๋๊ทธ๋ ํํฐ์ฒ๋ผ ์๋ํ๋ฉฐ ํธ์คํ
๊ตฌ์ฑ์ target
ํ๋๊ฐ ์์ผ๋ฉด CLI๊ฐ ์๋ฌด๊ฒ๋ ๋ฐฐํฌํ์ง ์์ต๋๋ค (์ ์ฉํ ๋ฉ์์ง๊ฐ์๋ ์ค๋ฅ ์ฌ์ผํ์ง๋ง ์ง๊ธ์ ๋งน๋ชฉ์ ์ผ๋ก ๊ทธ๊ฒ).
์ฃ์กํฉ๋๋ค, ๋์ ํ๋๋ฅผ ๋ฃ์ json์ ์์น๊ฐ ๋ช ํํ์ง ์์ต๋๋ค.์ด๋ฅผ json์ ๋ฃจํธ (์๋ํ์ง ์์)์ ๋๊ฑฐ๋ ํธ์คํ ์ ๋ฃจํธ์ ์์ด์ผํฉ๋๊น (๋ํ ๋๋ฅผ ์ํด ์๋ํ์ง ์์).
๋ํ ๋ด firebaserc ํ์ผ์ ๋ด ๋ฃจํธ ํ๋ก์ ํธ๋ฅผ ์ฐธ์กฐํ์ง๋ง ๋ ๋ฒ์งธ ํธ์คํ ์ฌ์ดํธ์ ๋ํ ์ฐธ์กฐ๊ฐ ์์ผ๋ฏ๋ก CLI ๋๊ตฌ๊ฐ ๋ฐฐํฌ ์์น๋ฅผ ์ด๋ป๊ฒ ์ดํดํ ์ ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
firebase.json
ํ์ผ์ ํธ์คํ
์น์
์ ์์ด์ผํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
{
// ...
"hosting": [{ // Can be an array and have multiple configs, or an object if you've only got a single config
"target": "blog",
"public": "build/blog"
// ...
}],
// ...
}
์ด ๋ฌธ์ ํ์ด์ง ๋ ๊ฐ ๋จ๊ณ์ ๋ํด ์์ธํ ์ค๋ช ํ๊ณ ๋์ ๋ฐ ์ฌ๋ฌ ์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ ์์๋ ์ด์ ์ ๋ํด ์กฐ๊ธ ์ค๋ช ํฉ๋๋ค.
firebase target:apply hosting dev firebase-hosting-id
ํ๋ฉด firebase-hosting-id
๊ฐ ๋ฐฐํฌ ํ ์ฌ์ดํธ ์ด๋ฆ์ด์ด์ผํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด firebase use
๋ช
๋ น์์ ํ์ฌ CLI์์๋ ํ๋ก์ ํธ์ ๋์์ด ์ค์ ๋ฉ๋๋ค. ํ์ง๋ง ๋น์ ์ด ์ฑ์ทจํ๋ ค๋ ๊ฒ์ ์คํดํ์ ์๋ ์์ต๋๋ค.
๊ณ ๋ง์์, ๋๋ ์ง์ ์ ๋ณด์ด๊ณ ์์ง๋ง ์ง๊ธ์ 404 ์ค๋ฅ ์ํฐํฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๊ทธ๋์ firebase์ ๋ด ํ๋ก์ ํธ๊ฐ reedy-1์ด๊ณ ๋ด ๋ชฉํ๊ฐ reedy-1-api๋ผ๊ณ ๋งํ์ญ์์ค.
reedy-1-api๋ก ํธ์คํ
์ ๋์์ ์ถ๊ฐํ๋ฉด ๋ฐฐํฌํ๋ ค๊ณ ํ ๋ ์ํฐํฐ๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ๋ถํํฉ๋๋ค.
๋ด firebaserc ํ์ผ์ ๋์ ์๋์์ ๋ณผ ์ ์์ต๋๋ค.
"targets": {
"reedy-1": {
"hosting": {
"dev-api": [
"reedy-1-api"
]
}
}
}
.firebaserc
ํ์ผ์ ์ค ๋ํซ์ด ์ฌ๋ฐ๋ฅธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ๋ฅํ ๋ฌธ์ (๋น์ ์ ์๋ง ์ด๊ฒ์ ํ์ธํ์ง๋ง ๋์ค์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๊ฒ์ ์ฐ์ฐํ ๋ฐ๊ฒฌ ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๋์ดํ๊ณ ์์ต๋๋ค) :
firebase use
์์ ์ ์ ํ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ธ์.firebase use --add
์ ํ๋ก์ ํธ ๋ชฉ๋ก์ ํตํด ์ํํด์ผํฉ๋๋ค).<site-name>.firebaseapp.com
๋ฅผ ํตํด ์ฝ๊ฒ ์ฐพ์ ์ ์์).๋๋ฒ๊ทธ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ๋ ค๊ณ ํ๋ฉด 404๋ฅผ ๋ฐํํ๋ ๋ถ๋ถ์ ๋ฌด์์
๋๊น? ์ค์ ํธ์คํ
๋ฐฐํฌ์ ์ฒซ ๋ฒ์งธ ์์ฒญ์ด๊ธฐ ๋๋ฌธ์ POST https://firebasehosting.googleapis.com/v1beta1/sites/<site-name>/versions
์์ ์ฌ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ํ๊ฒ์ผ๋ก ์ค์ ํ ์ฌ์ดํธ ์ด๋ฆ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ ์ ์ ์์ฒญํ๋ ๊ฒฝ์ฐ ํ๋ก์ ํธ์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ข์, ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์์๋ผ ์ ์์๋ค.
์ด๊ฒ์ ๋ํด์๋ ๋ ๋์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ํ์ํ๋ฏ๋ก blaze ์ด์์ด ์๋ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง๋ 404์ด๋ฉฐ ๊ฐ๊ฒฉ ๊ณํ ๋๋ฌธ์ ๋ฐฐํฌ ํ ์ ์๋ค๋ ๊ฒ์ด ๋ถ๋ช
ํ์ง ์์ต๋๋ค.
์
๊ทธ๋ ์ด๋ ํ ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค.
๋์์ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค.
์, ๊ธฐ๋ค๋ ค. ๋ฐฐํฌ๊ฐ ์๋ํ๋ ค๋ฉด Blaze๋ก ์ ๊ทธ๋ ์ด๋ํด์ผํ๋์? ์ ํธ์คํ ์ฌ์ดํธ๋ฅผ ์์ง ๋ง๋ค์ง ์์๊ณ ์ด๋ฅผ ์ํด ์ ๊ทธ๋ ์ด๋ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ๋์์ต๋๊น? ์๋๋ฉด ์ด์ ์ Blaze๋ก ์ ๊ทธ๋ ์ด๋ํ๊ณ ๋ ๋ฒ์งธ ํธ์คํ ์ฌ์ดํธ๋ฅผ ๋ง๋ค๊ณ ๊ฒฐ์ ์๊ธ์ ๋ฅผ ๋ค์ด ๊ทธ๋ ์ด๋ ํ ๋ค์ ๋ฐฐํฌ๋ฅผ ์๋ ํ์ต๋๊น?
๋ํ ์ด๋ค ์์ฒญ์ด ๊ทธ ์ค๋ฅ๋ฅผ ๋์ง๊ณ ์๋์ง ์๊ณ ์์ต๋๊น? ๋น์ ์ด ์ณ๊ธฐ ๋๋ฌธ์, ๊ทธ ์ค๋ฅ๋ ์ ํ ๋์์ด๋์ง ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ธ 404 ํ ์คํธ ๋์ ์ํ ํ ์์ ์ ๋ํ ์ง์นจ์ ์ ๊ณต ํ ์ ์๋๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ ์์น๋ฅผ ์ถ์ ํ๊ณ ์ถ์ต๋๋ค.
๋ค ๋ง์ต๋๋ค. ์ฝ๊ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. ํ๋ฆฌ ํฐ์ด์์ ๋ ๋ฒ์งธ ์ฌ์ดํธ๋ฅผ ๋ง๋ค์์ ๊ฒ์
๋๋ค. ๋ฐฐํฌํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์๊ณ ๊ทธ๋ด ์๋ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์
๊ทธ๋ ์ด๋ํ์ต๋๋ค. ๋ด๊ฐ github์์ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด์ผํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ ๋, ๋ค์ด ๊ทธ๋ ์ด๋ํ๊ณ ,์ด ์์
์ ์ํํ์ ๋ firebase ์น ์ฝ์์์ ์ด์ํ ์ผ์ด ์ผ์ด๋๊ธฐ ์์ํ์ต๋๋ค. ๋ ๋ฒ์งธ ํธ์คํ
์น ์ฌ์ดํธ๊ฐ ํ์๋์ง๋ง ํด๋ฆญํ๋ฉด ๋น ํ๋ฉด์ด ํ์๋ฉ๋๋ค.
์ง์์๋ฐ์ ํ ๋ฐฐํฌ๋ฅผ ์๋ํ๋๋ฐ ๋ฐฐํฌ์ 404๊ฐ ํ์๋์์ต๋๋ค. ๊ทธ๋์ ๋ค์ ๋ธ๋ ์ด์ฆ๋ก ์
๊ทธ๋ ์ด๋ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ๋ง๋ฒ์ฒ๋ผ ํจ๊ณผ๊ฐ์์์ต๋๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ
@isevcik ์ ๋ง? ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ ๋ฌธ์ ๋ฅผ ๊ณ ์ณค๋ค ๊ณ ํ์ ํ๋ค (๊ทธ๋ฆฌ๊ณ ๋๋ ์ด๊ฒ์ ์ ๋ง๋ก ๋ซ์์ด์ผํ๋ค). ํ๋ก์ ํธ๋ฅผ ์ ๊ทธ๋ ์ด๋ ํ ๋ค์ ๋ค์ด ๊ทธ๋ ์ด๋ํ๋ ๋น์ทํ ์์ ์ ์ํ ํ์ต๋๊น?
ํ๋ก์ ํธ์ ์ธ๋ถ ์ฌํญ์ ํ์ธํ๊ณ ์์ ํ ์ ์๋๋ก ์ง์ํ์ ์ด๋ฉ์ผ์ ๋ณด๋ด์ผ ํ ๊ฒ์ ๋๋ค. ์ด GitHub ๋ฌธ์ ์ ์ ๋ฅผ ์ธ๊ธํ์ฌ ๊ทธ๋ค์ด ๋๊ตฌ์๊ฒ ๋ณด๋ผ์ง ์ ์ ์๋๋กํด์ผํฉ๋๋ค.
@isevcik ๋์ผํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ๋์ผํ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ์ง๋ง .firebaserc์ projectid์์ ์คํ๋ก ํ๋ช
๋์์ต๋๋ค.
์ด ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ํํ๋ ๋์ ์ด๋ฌํ ๋์์ ์ถ๊ฐํ์ผ๋ฉฐ ์ ๋๋ก ์๋ํ์ต๋๋ค.
์ฐธ๊ณ : ๋ํ firebase.json์ ๋์์ ์ถ๊ฐํด์ผํฉ๋๋ค.
firebase target : apply type target-name resource-name
์๋ ํ์ธ์, ๊ฐ์ ๋ฌธ์ :
[debug] [2019-08-09T17:34:19.322Z] TypeError: Cannot read property 'deploys' of undefined
at /Users/kevinliu/.npm-global/lib/node_modules/firebase-tools/lib/deploy/index.js:84:36
at processTicksAndRejections (internal/process/task_queues.js:85:5)
[error]
[error] Error: An unexpected error has occurred.
index.js
:
if (deployedHosting) {
_.each(context.hosting.deploys, function (deploy) {
logger.info(clc.bold("Hosting URL:"), utils.addSubdomain(api.hostingOrigin, deploy.site));
});
const versionNames = context.hosting.deploys.map((deploy) => deploy.version);
return { hosting: versionNames.length === 1 ? versionNames[0] : versionNames };
}
@hpoit ๋๋ ๋ํ ๊ทธ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ํด๊ฒฐ ํ์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ๋ฌด์์ ๋ณ๊ฒฝ ํ์ต๋๊น?
[debug] [2019-08-16T18:44:01.159Z] TypeError: Cannot read property 'deploys' of undefined
at C:\Users\Kraken\AppData\Roaming\npm\node_modules\firebase-tools\lib\deploy\index.js:84:36
at process._tickCallback (internal/process/next_tick.js:68:7)
[error]
[error] Error: An unexpected error has occurred.
@Memeriaj๊ฐ ์ ์ํ๋๋ก
@MaxInertia ์, ํด๊ฒฐํ์ต๋๋ค. ์ ์ฒด ์์คํ ์ ํฌ๋งทํ๊ณ ์ง ์ ์ต๋๋ค. :-)
๊ตฌ์ฑ์์ ๋ฐฐํฌ ๋์์ ์ฐพ์ ์ ์์ ๋์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ๊ฐ์ ๊ตฌ์ฑ firebase ํ์ผ์์ ๊ตฌ์ฑ์ ํ์ธํฉ๋๋ค. 2 ์ฐจ ์๊ฒฌ์ ์ํ์๋ฉด ์ฌ๊ธฐ์ ๋ด์ฉ์ ๊ฒ์ํ์ญ์์ค.
firebase 7.3.1์ ์ฌ์ฉํ์ฌ ๋ณด์กฐ ์น ์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ๋ ค๊ณ ํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
์ฌ์ค, ์ค๋ฅ๊ฐ firebase.json์ ์์์ผ๋ฉฐ ์๋ชป๋ "๋์"์ ์ง์ ํ์ต๋๋ค.
์ด ๊ฐ์ด๋์ ๋์์ผ๋ก ์ ๋ฐฐํฌ ๋์์ ๋ง๋ค์ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์์์ต๋๋ค.
https://firebase.google.com/docs/hosting/multisites?authuser=1#set_up_deploy_targets
๋๋ ํ๋์ ๋ช ๋ น์ ๋ด๋ ธ๋ค.
firebase target:apply hosting blog myapp
target
ํค๋ฅผ firebase.json
{
"hosting": {
"target": "myapp",
...
}
...
}
ํธ์ง : ์๋ก์ด firebase ํ๋ก์ ํธ์์ ์ฒซ ๋ฒ์งธ ํธ์คํ ์ ์ค์ ํ ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋๋ ํด๊ฒฐํ ์ ์์๋ค. ๋ด ๋ฌธ์ ๋ docs : $ firebase target : apply hosting target-name resource-name์ ์ค๋ช ๋ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ ๋์์ ๋ง๋ค ๋ ๊ธฐ๋ณธ ํ๋ก์ ํธ๋ฅผ ๋ฆฌ์์ค ์ด๋ฆ์ผ๋ก ๋ฃ์๋ค๋ ๊ฒ์ ๋๋ค. .firebaserc ํ์ผ์์ ๋ณ๊ฒฝํ๊ณ firebase deploy ๋ช ๋ น์ ์คํํ๋๋ฐ ์ ๋๋ก ์๋ํ์ต๋๋ค. ์๋ ์ :
"targets": {
"firebase-project-name": {
"hosting": {
"admin": [
"admin-project"
]
}
}
}
์๋ ํ์ธ์ ๋ํ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค (์ฌ์ฉ์ ์ง์ ์ถ๊ฐ ๋๋ฉ์ธ์ ๊ฒฝ์ฐ).
๋ค๋ฅธ ๋์ ์ด๋ฆ์ผ๋ก ์ฌ๋ฌ ํธ์คํ ์ ๋ฐฐํฌ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ฉ์ ์ง์ ์ถ๊ฐ ๋๋ฉ์ธ์ ๋ฐฐํฌํ๋ ค๊ณ ํ ๋. ์ค๋ฅ : HTTP ์ค๋ฅ : 404, ์์ฒญ ๋ ์ํฐํฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๋ด ๋ง์ถค ๋๋ฉ์ธ์ 3dprinter.froozen.in์
๋๋ค (๋ง์ถค ๋๋ฉ์ธ ์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ ๊ธฐ๋ณธ ํธ์คํ
๋ด์์ Firebase์ ์ถ๊ฐ๋จ).
๋ด ์ฌ์ฉ์ ์ง์ ๋๋ฉ์ธ์ด ๋ด ํ๋ก์ ํธ ๊ธฐ๋ณธ ๋๋ฉ์ธ ๋ด์ ์ถ๊ฐ๋ฉ๋๋ค.
๋ ์งํํ๋๋ก ์น์ ํ๊ฒ ๋์์ฃผ์ธ์.
๋์์ ๋ฐ์ผ๋ ค๋ฉด ์ ํํ ์คํจ ํธ์ถ์ ๋ณด์ฌ์ฃผ๋ ๋๋ฒ๊ทธ ๋ก๊ทธ๊ฐ ํ์ํฉ๋๋ค.
๋ฌธ์ ๋ฅผ ์ง๋จํ์ญ์์ค.
2020 ๋ 1 ์ 4 ์ผ ํ ์์ผ ์ค์ 12:52 nandha [email protected] ์์ฑ :
์๋ ํ์ธ์๋ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค (๋ง์ถคํ
์ถ๊ฐ ๋ ๋๋ฉ์ธ)๋ค๋ฅธ ๋์ ์ด๋ฆ์ผ๋ก ์ฌ๋ฌ ํธ์คํ ์ ๋ฐฐํฌ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋
์ฌ์ฉ์ ์ง์ ์ถ๊ฐ ๋๋ฉ์ธ์ ๋ฐฐํฌํ๋ ค๊ณ ํ ๋. ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค : HTTP์ค๋ฅ : 404, ์์ฒญ ๋ ์ํฐํฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.๋ด ์ฌ์ฉ์ ์ง์ ๋๋ฉ์ธ์ 3dprinter.froozen.in์ ๋๋ค (Firebase ๋ด๋ถ์ ์ถ๊ฐ๋จ).
์ฌ์ฉ์ ์ง์ ๋๋ฉ์ธ ์ถ๊ฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ ๊ธฐ๋ณธ ํธ์คํ )
๋ด ์ฌ์ฉ์ ์ง์ ๋๋ฉ์ธ์ด ๋ด ํ๋ก์ ํธ ๊ธฐ๋ณธ ๋๋ฉ์ธ ๋ด์ ์ถ๊ฐ๋ฉ๋๋ค.
๋ ์งํํ๋๋ก ์น์ ํ๊ฒ ๋์์ฃผ์ธ์.โ
์ด ์ค๋ ๋๋ฅผ ๊ตฌ๋ ํ๊ธฐ ๋๋ฌธ์์ด ๋ฉ์์ง๊ฐ ์ ์ก๋์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/firebase/firebase-tools/issues/1232?email_source=notifications&email_token=AAAAH7SNCPUEIMIWCDHK6CDQ4BE4JA5CNFSM4HJWK5J2YY3PNVWWK3TUL52HS4DFWSVREXG43684ZLOBW63com5E7072ZLOBW63comZNMVXHJ
๋๋ ๊ตฌ๋ ์ทจ์
https://github.com/notifications/unsubscribe-auth/AAAAH7V26G3YF6Q7FYDP5QTQ4BE4JANCNFSM4HJWK5JQ
.
์๋ ํ์ธ์ @mbleigh ,
๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
๋ ์ด์ ์ฟผ๋ฆฌ๊ฐ ์์ผ๋ฉด์ด ๋ฌธ์ ๋ฅผ ๋ซ์ ์ ์์ต๋๋ค.
์ง๋ฌธ์ด ์์ผ์๋ฉด ์๋์ ์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์.
"์ค๋ฅ : HTTP ์ค๋ฅ : 404, ์์ฒญ ๋ ์ํฐํฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค"์ ๋ํ ๋ด ๋ฌธ์ ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์ต๋๋ค.
```
"๋์": {
"ํ๋ก์ ํธ ์ด๋ฆ": {
"ํธ์คํ
": {
"dev": [
"dev.site.com"
],
"prod": [
"site.com"
]
}
}
}
istead of
```
"targets": {
"projectname": {
"hosting": {
"dev": [
"dev-site-name"
],
"prod": [
"ez-site-name"
]
}
}
}
๋ค์์ ํ์ธํ์ฌ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
์ด ์์ด์ผํฉ๋๋ค.{
"projects": {
"default": "my-project-id"
},
"targets": {
"my-project-id": {
"hosting": {
"my-blog": [
"my-blog-host-id"
]
}
}
}
}
targets
๋ถ๋ถ์ firebase target:apply hosting my-blog my-blog-host-id
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์์ฑ ํ ์ ์์ต๋๋ค.
hosting
๊ฐ ๋ฐฐ์ด๋ก ์์ด์ผํ๊ณ ํญ๋ชฉ์๋ target: <TARGET_NAME>
๊ฐ ์์ด์ผํฉ๋๋ค.{
"hosting": [{
"target": "my-blog",
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}]
}
์ค์ํ ๋ถ๋ถ์ hosting
๋ฅผ ๋ฐฐ์ด๋ก ๋ง๋ค๊ณ ํญ๋ชฉ์ target
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค.
์ค๋๋ ์ด๊ฒ์ ๋ง์๋๋ฐ, firebase.json hosting
์ ๋ฐฐ์ด๋ก ๋ณํํ๋ ๊ฒ์ ์ ๋ง ๊ณ ํต ์ค๋ฝ์ต๋๋ค!
์ด์ ๋ชจ๋ ํ๊ฒฝ์ ๋ํด ๋ง์ ํค๋ ๊ตฌ์ฑ์ด์๋ ๋ชจ๋ ํญ๋ชฉ (๋์์ ์ ์ธํ๊ณ ๋์ผํ๋๋ผ๋)์ ๋ณต์ ํด์ผํฉ๋๋ค. ๊ฐ์๊ธฐ ๊ด๋ฆฌํด์ผํ๋ 4x json ๊ตฌ์ฑ ์ ๋๋ค.
์ด์จ๋ firebase json์ ๊ธฐ๋ณธ ํธ์คํ ์ ์ฌ์ฌ์ฉํ๋ ค๋ฉด?
๋์ผํ ํ๋ก์ ํธ์ ์ฌ๋ฌ ์ฌ์ดํธ๋ "ํ๊ฒฝ"์ผ๋ก ์ฌ์ฉ๋์ง ์์ต๋๋ค. "์คํ
์ด์ง", "dev"๋ฑ์ ์ฌ์ดํธ๊ฐ์๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ฌ์ดํธ ์ฌ์ผํ๋ฉฐ firebase use
๋ช
๋ น์ด ๋์์ด ๋ ์ ์์ต๋๋ค. ๋น์ ์ ๊ทธ๋ค ์ฌ์ด์์ ์ ํ / ๋ฐฐํฌํฉ๋๋ค.
๊ทธ๊ฒ์ด ๋น์ ์ดํ๋ ์ผ์ด ์๋๋ผ๋ฉด, ํ๋ก์ ํธ์ ๊ฐ ์ฌ์ดํธ์ ๋ํ firebase.json
๊ตฌ์ฑ์ด ๋์ผํ ์ด์ ๋ฅผ ์ดํดํ๋๋ก ๋์ ์ฃผ์๊ฒ ์ต๋๊น?
๊ธ์์, ๊ทธ๊ฒ์ ๊ฑฐ์ ์์ฝํฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ์ฌ ์๋ก ๋ค๋ฅธ GCP ํ๋ก์ ํธ์ 4 ๊ฐ์ ์๋ก ๋ค๋ฅธ ํ๊ฒฝ์ ๊ฐ์ง๊ณ ์์ง๋ง, ์์ ํ๊ฒฝ (Firebase ํธ์คํ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถ๋ถ์ ํฌํจ)์ ๋ฐฐํฌํด์ผํ๊ณ , ๊ธฐ์กด ํ๊ฒฝ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๊ฐ๋จํ๋ค๊ณ ๋๊ผ์ต๋๋ค. ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์ถ๊ฐํ๋ ๋์ ํ๋ ๋ฌ ๋์ GCP ํ๋ก์ ํธ๋ฅผ ์งํํฉ๋๋ค.
์ด atm์ ๋ฌ์ฑํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ firebase.json ํธ์คํ ๊ตฌ์ฑ์ 5 ๋ฒ ๋ณต์ ํ๊ณ ๊ฐ ๊ตฌ์ฑ์ ๊ณ ์ ํ ๋์์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
ํผ๋์ ์์ธ์ ๊ธฐ๋ณธ ํธ์คํ ๊ตฌ์ฑ์ด ์์ผ๋ฉด ๋ชจ๋ ๋์ ๋๋ ํ๋ก์ ํธ์์ ์๋ ํ ๊ฒ์ผ๋ก ์์๋์ง๋ง ํ๋ก์ ํธ + ๋์๊ณผ ๋น๊ตํ์ฌ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง์ ๋ํ ์คํด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ถ๋ช
ํ ์ฌ์ ํ ์๋ํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ด์ ๋ฅผ ์ดํดํ๋ ๋์ ์ ์๋ง ๊ธฐ๋ค๋ ค์ฃผ์ญ์์ค.
2020-06-22T17:20:39.837Z] TypeError: Cannot read property 'deploys' of undefined
์ค๋ฅ ๋ฉ์์ง๋ ํ์คํ ๋์๊ณ FWIW๋ ํ์ฌ ๊ฐ๋ฐ์ค์ธ "์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ"์ ๋ํ ๋ ๋์ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ๐
"์ด๋ ์ด ์์ "์ ์ถ๊ฐํ๊ธฐ ์ํด ๋ ๊ฐ์ ์ฌ์ดํธ๋ฅผ ๋ฐฐํฌํ์ต๋๋ค. ๋์์ ์ด๋ ์ด๋ก ๋ณ๊ฒฝ ํ ํ ์ฌ๋ฐ๋ฅธ ์ฌ์ดํธ๋ฅผ ๋์์ผ๋ก ์ง์ ํ ์์์์ต๋๋ค.
{
"hosting": [
{
"target": "web",
"public": "public",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
},
{
"target": "admin",
"public": "build",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
]
}
๊ทธ๋ฌ๋ "๊ด๋ฆฌ์"๋ ์ฐ๋ฆฌ๊ฐ React๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋น ํ์ด์ง๋ฅผ ๋ฐํํ์ต๋๋ค. ํธ๋ฆญ์ ๋น๋์ ๋ํ ๊ณต๊ฐ ์ง์ ์ ๊ฐ๋ ๊ฒ์ด ์์ต๋๋ค.
"public": "build",
์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ ์์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ค ๋์์ ์ฌ์ฉํ๋ ๋ชจ๋ ํ์ผ๊ณผ ์ค์ ์ด ์ฌ๋ฐ๋ฅธ ๊ฒ์ผ๋ก๋ณด๊ณ ๋์์์๋ ๋ถ๊ตฌํ๊ณ ์ด๋ฅผ ์กด์คํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์์ ๋ค๋ฃจ์ง ์์ ๋ค๋ฅธ ๊ฒ์ด ์์ต๋๊น?
์คํ : firebase target:apply hosting second-project-id second-project-id
๊ทธ๋ฐ ๋ค์ .firebaserc ํ์ผ์ ์ด๊ณ ๋ค์๊ณผ ๊ฐ์์ง ํ์ธํ์ญ์์ค.
`{
"๋์": {
"main-project-id": {
"ํธ์คํ
": {
"๋ ๋ฒ์งธ ํ๋ก์ ํธ ID": [
"๋ ๋ฒ์งธ ํ๋ก์ ํธ ID"
]
}
}
}
}`
๊ทธ๋ฐ ๋ค์ firebase.json ํ์ผ์ ์ด๊ณ ๋ค์์ด ์๋์ง ํ์ธํ์ญ์์ค.
"๋์": "๋ ๋ฒ์งธ ํ๋ก์ ํธ ID",
ํ , ์ ํํ ๋ฌด์์ํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ํ์ฌ .firebaserc
์ ํจ๊ป ์๋ํฉ๋๋ค.
{
"projects": {
"default": "mainProjectId"
},
"targets": {
"mainProjectId": {
"hosting": {
"production": [
"mainProjectId"
],
"staging": [
"secondProjectId"
]
}
}
}
}
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค์์ ํ์ธํ์ฌ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
targets.<PROJECT_ID>.hosting.<TARGET_NAME> = [ "<HOST_ID" ]
์ด ์์ด์ผํฉ๋๋ค.targets
๋ถ๋ถ์firebase target:apply hosting my-blog my-blog-host-id
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์์ฑ ํ ์ ์์ต๋๋ค.hosting
๊ฐ ๋ฐฐ์ด๋ก ์์ด์ผํ๊ณ ํญ๋ชฉ์๋target: <TARGET_NAME>
๊ฐ ์์ด์ผํฉ๋๋ค.์ค์ํ ๋ถ๋ถ์
hosting
๋ฅผ ๋ฐฐ์ด๋ก ๋ง๋ค๊ณ ํญ๋ชฉ์target
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.