Я не нашел достаточно информации на сайте firebase о том, как развернуть Next.js.

Ниже приводится то, что я узнал на форумах github / stackoverflow, которые я посетил. Не уверен, что в ближайшее время он будет изменен, но надеюсь, что он все еще будет полезен!

Структура папки

├── dist (folder) ├── functions (folder) ├── next (folder
├── public (folder)
├── functions (folder) ├── index.js
├── public (folder)
├── src (folder)
├── firestore.indexes.json
├── firestore.rules
├── storage.rules
├── firebase.json
├── package-lock.json
├── package.json

инструкции

1. Создайте проект Firebase.

(1) Создайте папку для проекта firebase. пример: firebaseApp

(2) Инициализировать pacakge.json npm init или yarn init

(3) Установить инструменты firebase глобально npm install -g firebase-tools

(4) Войдите в Firebase CLI для входа в firebase

  • убедитесь, что вы создали учетную запись google

(5) Инициализировать проект Firebase, firebase init

  • Выбираю Firestore, Функции, Хостинг, Хранилище
  • Я выбираю существующий проект, созданный в веб-консоли Firebase
  • Выбираю firestore.rules
  • Выбираю firestore.indexes.json
  • Я выбираю javascript
  • Я выбираю Нет для использования ESLint
  • Я выбираю установку зависимостей сейчас
  • Я выбираю общедоступный в качестве общедоступного каталога
  • Выбираю storage.rules

(6) Что у нас должно быть сейчас?

  • firebase.json, .firebaserc, все выбранные мной правила, каталог функций, общедоступный каталог

(7) Измените путь хостинга / функций для облачных функций Firebase в firebase.json.

"hosting": {
"public": "dist/public",
"rewrites": [
  {
  "source": "**/**",
  "function": "next"
  }
 ]
},
"functions": {
"source": "dist/functions"
 }

2. Создайте все папки, как указано выше.

Итак, на этом этапе нам нужно создать каталог dist и src.

(1) dist: для развертывания. Создайте в нем общедоступный каталог и каталог функций.

(2) функции: функции firebase. Он нам нужен для развертывания нашего Next.js.

(3) общедоступные: для статических файлов, таких как изображения.

(4) src: для исходных файлов проекта Next.js. Просто поместите в него все.

3. Работа над справочником функций.

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

(1) Установите все зависимости исходного кода моего приложения в каталог функций.

(2) Работайте над index.js. Это облачная функция для обслуживания моего приложения.

const functions = require('firebase-functions');
const express = require('express');
const cors = require('cors');
const path = require('path')
const admin = require('firebase-admin')
const next = require('next');
const dev = process.env.NODE_ENV !== 'production'
const app = next({dev, conf: {distDir: `${path.relative(process.cwd(), __dirname)}/next`}});
const handle = app.getRequestHandler();
admin.initializeApp()
exports.next = functions.https.onRequest(async (req, res) => {
console.log('File: ' + req.originalUrl); // log the page.js file that is being requested
await app.prepare();
handle(req, res);
});

4. Работа с каталогами dist

(1) Скопируйте package.json, package-lock.json, index.js в dist / functions.

(2) Установите все зависимости в dist / functions с помощью npm install

(3) Скопируйте все из общей папки в dist / public

5. Создайте сборку для проекта Next.js.

(1) Перейдите в папку src. Создайте next.config.js и добавьте distDir

module.exports = {
distDir: '../dist/functions/next'
}

(2) используйте next build create build или используйте npm run build и поместите скрипт в package.json

(3) Убедитесь, что будет создана следующая папка в dist / functions.

6. Готов к развертыванию

(1) Перейдите в папку firebaseApp

(2) Тест с помощью firebase serve Установите следующий скрипт в package.json

"serve": "NODE_ENV=production firebase serve",

(3) Развертывание Firebase Просто запустите firebase deploy или поместите его в package.json как скрипт.