Javascript 将Vue/Nuxt应用程序作为带有SSR的通用应用程序部署到Firebase

Javascript 将Vue/Nuxt应用程序作为带有SSR的通用应用程序部署到Firebase,javascript,firebase,vue.js,google-cloud-functions,nuxt.js,Javascript,Firebase,Vue.js,Google Cloud Functions,Nuxt.js,我正在尝试将我的Universal Nuxt.js应用程序部署到Firebase。所有关于这样做的信息似乎都过时了,我无法让它完全工作 SSR似乎与托管的静态资产一起工作。例如,中间件仅在客户端执行,而不是在服务器上执行(例如,当它第一次通过SSR加载时),当它部署在具有firebase功能/托管(或使用firebase Service)的firebase上时 我有以下项目结构: project └─ /functions (firebase functions including `nuxt/

我正在尝试将我的Universal Nuxt.js应用程序部署到Firebase。所有关于这样做的信息似乎都过时了,我无法让它完全工作

SSR似乎与托管的静态资产一起工作。例如,中间件仅在客户端执行,而不是在服务器上执行(例如,当它第一次通过SSR加载时),当它部署在具有firebase功能/托管(或使用
firebase Service
)的firebase上时

我有以下项目结构:

project
└─ /functions (firebase functions including `nuxt/` built files)
└─ /src (nuxt app, using `create-nuxt-app` starter template)
└─ /public (includes static files and built nuxt client files)
└─ firebase.json
src/nuxt.config.js中设置构建选项

mode: 'universal',
...
buildDir: process.env.NODE_ENV === 'development' ? '.nuxt' : '../functions/nuxt',
build: {
  publicPath: process.env.NODE_ENV === 'development' ? '/public/' : '/',
  extractCSS: true,

  ...
}
functions/package.json中
设置为使用节点v8

"engines": {
  "node": "8"
},
...
以及
functions/index.js

const functions = require('firebase-functions');

const admin = require('firebase-admin')
const { Nuxt } = require('nuxt')
const express = require('express')

const app = express()

// Set Nuxt.js options
const config = {
  dev: false,
  buildDir: 'nuxt',
  build: {
    publicPath: '/'
  },
}

const nuxt = new Nuxt(config)

function handleRequest(req, res) {
  res.set('Cache-Control', 'public, max-age=300, s-maxage=600')
  nuxt.renderRoute('/')
    .then(result => {
      res.send(result.html)
    })
    .catch(e => {
      res.send(e)
    })
}
app.get('*', handleRequest)
exports.nuxtapp = functions.https.onRequest(app)
firebase.json
中,指示firebase使用该函数

"rewrites": [
  {
    "source": "**",
    "function": "nuxtapp"
  }
]
我还将所有依赖项从
src/package.json
添加到
functions/package.json

src
文件夹中的
npm run build
上,在部署(用于firebase静态主机和CDN)之前,已构建的Nuxt客户端文件(
firebase/Nuxt/dist/client/*
)和应用程序的静态文件(
src/static/*
)将被复制到
public
文件夹中

使用此设置,静态资产托管和SSR在部署到Firebase上时似乎可以工作,但当使用Firebase函数在服务器端渲染时,
中间件/asyncData/nuxtServerInit/etc
不会执行

例如,当在本地开发模式下(
npm-run-dev
)时,中间件在服务器/客户端上都能正常工作

当部署到Firebase上时,为了使其正常工作,我遗漏了什么或做错了什么


谢谢

你的回购协议是公开的,我可以看一下吗?我需要更多的信息来提供帮助。当您直接点击firebase函数的GET请求时会发生什么?我找到了本教程,它可能会帮助您:您解决了吗?我在“nuxtServerInit/middleware”上遇到了与firebase云函数相同的问题,但在“asyncData”上没有问题。你解决了吗?我从来没有解决过,但一周内我将试图完成这个项目。我想我会用的