Javascript 将Vue/Nuxt应用程序作为带有SSR的通用应用程序部署到Firebase
我正在尝试将我的Universal Nuxt.js应用程序部署到Firebase。所有关于这样做的信息似乎都过时了,我无法让它完全工作 SSR似乎与托管的静态资产一起工作。例如,中间件仅在客户端执行,而不是在服务器上执行(例如,当它第一次通过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/
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”上没有问题。你解决了吗?我从来没有解决过,但一周内我将试图完成这个项目。我想我会用的