NextJS выдает ошибку при развертывании функций Firebase

TL; DR; Я следую примеру NextJS с использованием Firebase, и с минимальными изменениями я не могу нажать на Firebase.

Я следую with-firebase от NextJS пример -hosting-and-typescript и в соответствии с помощью # 8893.

Я изменил сценарий deploy в package.json на cross-env NODE_ENV=production firebase deploy.

Я также изменил значение conf в functions/index.ts на

conf: {
    distDir: `${path.relative(process.cwd(), __dirname)}/../functions/next`
}

Когда я перехожу к развертыванию приложения на firebase, я получаю сообщение об ошибке

Ошибка развертывания. Ошибка при настройке среды выполнения для вашей функции. Повторите развертывание через несколько минут.

Я сделал некоторую отладку, и если я закомментирую строку

const app = next({ dev, conf: { distDir: `${path.relative(process.cwd(), __dirname)}/../functions/next` } 
})

в functions/index.ts, тогда функции будут развернуты нормально. Итак, проблема, похоже, связана с next()

Вот код functions/index.ts, это вызывает ошибку.

import * as functions from 'firebase-functions'
import next from 'next'
import * as path from 'path'



const appSetup = { 
  dev: process.env.NODE_ENV !== 'production', 
  conf: { distDir: `${path.relative(process.cwd(), __dirname)}/../functions/next` } 
}
console.log("appSetup: ", appSetup)
const app = next(appSetup)
// const handle = app.getRequestHandler()

export const nextApp = functions.https.onRequest(async(req, res) => {
  // return app.prepare().then(() => handle(req, res))
  return res.send({ status: "Hello from Firebase!, nextApp" })
})

Вот код functions/index.ts, это НЕ вызывает ошибку

import * as functions from 'firebase-functions'
import next from 'next'
import * as path from 'path'



const appSetup = { 
  dev: process.env.NODE_ENV !== 'production', 
  conf: { distDir: `${path.relative(process.cwd(), __dirname)}/../functions/next` } 
}
console.log("appSetup: ", appSetup)
// const app = next(appSetup)
// const handle = app.getRequestHandler()

export const nextApp = functions.https.onRequest(async(req, res) => {
  // return app.prepare().then(() => handle(req, res))
  return res.send({ status: "Hello from Firebase!, nextApp" })
})

in package.json

"firebase-admin": "^8.10.0",
"firebase-functions": "^3.6.0",
"next": "^9.3.5",
"react": "16.13.1",
"react-dom": "16.13.1"

person user1184205    schedule 18.04.2020    source источник
comment
В Stack Overflow, пожалуйста, не показывайте изображения текста или кода. Скопируйте текст в сам вопрос и отформатируйте его, чтобы его было легко читать, копировать и искать.   -  person Doug Stevenson    schedule 18.04.2020
comment
@DougStevenson Извините, теперь это исправлено.   -  person user1184205    schedule 19.04.2020


Ответы (1)


Для всех, кто борется с той же проблемой. Исправление было строкой в ​​functions/index.ts

Мне нужно было заменить

conf: { distDir: `${path.relative(process.cwd(), __dirname)}/../functions/next` }

to

conf: { distDir: `${path.relative(process.cwd(), __dirname)}/next` }
person user1184205    schedule 19.04.2020