해당 글은 CLI를 통해 Cloud Function을 어떻게 배포할 수 있는지에 대해 다루고 있습니다. 이 글은 이전 글인 Firebase Hosting에서 제시된 hosting 관련 세팅이 프로젝트에 이미 적용됐다는 전제하에 작성된 글입니다.
Firebase 프로젝트에 배포할 폴더(소스 파일이 있는 폴더)에서 firebase init 명령어를 사용하여, cloud function 관련 세팅을 추가합니다.
$ firebase init
위의 명령어를 입력하면 다음과 같이 firebase에서 사용할 것을 선택하게 됩니다. 여기서 space를 눌러 functions를 선택하고, enter를 눌러 다음으로 넘어갑니다.
Deploy될 Firebase Project를 선택해야 합니다. Use an existing project를 눌러 기존에 존재하는 프로젝트를 선택합니다.
배포될 Firebase Project를 선택합니다.
위에서 Firebase 프로젝트를 선택했으면 다음은 Cloud functions를 설정하게됩니다.
npm install을 할지 여부를 결정하게 되는데, y를 눌러 설치합니다.
다음과 같이 루트 디렉토리에 functions 폴더가 생성된 것을 확인할 수 있습니다.
const functions = require('firebase-functions');
exports.helloFunction = functions.https.onRequest((request, response) => {
functions.logger.info('Hello World!');
const htmlString = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Change Title</title>
</head>
<body>
<div>test</div>
<div>test</div>
<div>test</div>
</body>
</html>
`;
response.set('Content-Type', 'text/html');
response.send(Buffer.from(htmlString));
});
// firebase.json
{
"hosting": {
"site": "my-site-id",
"public": "build",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "/test",
"function": "helloFunction"
},
{
"source": "**",
"destination": "/index.html"
}
],
"predeploy": ["npm run build"]
},
"functions": {
"source": "functions",
}
}
$ firebase deploy
firebase deploy를 입력하게 되면 hosting, functions 둘 다 deploy되는데, 이 때, functions에 먼저 deploy되고, hosting에 그 다음에 deploy됩니다..
$ firebase deploy --only hosting
$ firebase deploy --only functions
hosting, functions 둘 다 predeploy로 npm run build를 넣고, firebase deploy를 하게 되면 build를 두 번하게 됩니다. build를 한 번만 할 수 있도록 조정하시길 바랍니다.
혹시 express로 진행하는 경우도 있을까요?
app.get("*", (req, res) => {
const indexHTML= ""
error404 ? res.status(400).send(indexHTML) : res.status(200).send(Buffer.from(indexHTML));
});
이쪽으로 들어오게해서 진행하는데 다른 페이지는 잘나오는데 index page만 express를 안타는데 왜그런지 모르겠습니다.