몇 가지 추가 구성을 사용하면 기본 프레임워크 인식 CLI 기능을 기반으로 통합 지원을 Angular 및 Next.js 이외의 프레임워크로 확장할 수 있습니다.
시작하기 전에
Next.js 앱을 Firebase에 배포하기 전에 다음 요구사항 및 옵션을 검토하세요.
- Firebase CLI 버전 11.14.2 이상. 선호하는 방법으로 CLI를 설치하세요.
- 선택사항: Firebase 프로젝트에서 결제 사용 설정(SSR을 사용하려는 경우는 필수)
Firebase 초기화
시작하려면 프레임워크 프로젝트를 위해 Firebase를 초기화하세요.
새 프로젝트에 Firebase CLI를 사용하거나 기존 프로젝트에서 firebase.json
을 수정합니다.
새 프로젝트 초기화
- Firebase CLI에서 웹 프레임워크 미리보기를 사용 설정합니다.
firebase experiments:enable webframeworks
- CLI에서 초기화 명령어를 실행한 후 메시지를 따릅니다.
firebase init hosting
- 호스팅 소스 디렉터리를 선택합니다. 기존 웹 앱일 수도 있습니다.
- '웹 프레임워크를 사용한 동적 웹 호스팅'을 선택합니다.
- Express.js / custom을 선택합니다.
기존 프로젝트 초기화
firebase.json
에서 호스팅 구성을 변경하여 public
옵션이 아닌 source
옵션을 갖도록 합니다. 예를 들면 다음과 같습니다.
{
"hosting": {
"source": "./path-to-your-express-directory",
}
}
정적 콘텐츠 제공
정적 콘텐츠를 배포하기 전에 애플리케이션을 구성해야 합니다.
구성
애플리케이션을 배포하는 방법을 알아보려면 Firebase CLI에서 앱을 빌드하고 도구가 호스팅용 자산을 배치하는 위치를 모두 알아야 합니다. 이 작업은 package.json
의 npm 빌드 스크립트와 CJS 디렉터리 지시문으로 실행됩니다.
다음 package.json이 주어집니다.
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
Firebase CLI는 빌드 스크립트만 호출하므로 빌드 스크립트가 완전한지 확인해야 합니다.
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
…
}
프레임워크가 처음부터 사전 렌더링을 지원하지 않으면 Rendertron과 같은 도구를 사용하는 것이 좋습니다. Rendertron을 사용하면 앱의 로컬 인스턴스에 대한 헤드리스 Chrome 요청을 할 수 있기 때문에 결과 HTML을 호스팅에 제공할 수 있습니다.
마지막으로 여러 프레임워크와 빌드 도구가 아티팩트를 서로 다른 위치에 저장합니다. directories.serve
를 사용하여 빌드 스크립트가 결과 아티팩트를 출력하는 위치를 CLI에 전달합니다.
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node prerender.ts"
},
"directories": {
"serve": "dist"
},
…
}
배포
앱을 구성한 후 표준 배포 명령어를 사용하여 정적 콘텐츠를 제공할 수 있습니다.
firebase deploy
동적 콘텐츠 제공
Firebase용 Cloud Functions에서 Express 앱을 제공하려면 라이브러리가 npm으로 압축된 후 Firebase에서 찾을 수 있도록 Express 앱(또는 Express 스타일의 URL 핸들러)을 내보내야 합니다.
이렇게 하려면 files
지시어가 서버에 필요한 모든 것을 포함하고 기본 진입점이 package.json
에서 올바르게 설정되어 있어야 합니다.
{
"name": "express-app",
"version": "0.0.0",
"scripts": {
"build": "spack && npm run static && npm run prerender",
"static": "cp static/* dist",
"prerender": "ts-node tools/prerender.ts"
},
"directories": {
"serve": "dist"
},
"files": ["dist", "server.js"],
"main": "server.js",
...
}
app
이라는 함수에서 express 앱을 내보냅니다.
// server.js
export function app() {
const server = express();
…
return server;
}
또는 express 스타일 URL 핸들러를 내보내려면 이름을 handle
로 지정합니다.
export function handle(req, res) {
res.send(‘hello world’);
}
배포
firebase deploy
이렇게 하면 정적 콘텐츠가 Firebase 호스팅에 배포되고 Firebase가 Firebase용 Cloud Functions에 호스팅된 Express 앱으로 대체됩니다.
선택사항: Firebase 인증과 통합
웹 프레임워크 인식 Firebase 배포 도구는 쿠키를 사용하여 클라이언트 및 서버 상태를 자동으로 동기화합니다. 인증 컨텍스트에 액세스하기 위해 Express res.locals
객체에는 인증된 Firebase 앱 인스턴스(firebaseApp
)와 현재 로그인한 사용자(currentUser
)가 필요에 따라 포함됩니다.