求助:Firebase部署支持SSR的Nuxt.js云函数遇版本兼容报错
我之前也碰到过一模一样的问题——Firebase云函数默认的Node 6版本跟Nuxt 1.x+的最低要求冲突,加了Babel还是报错,折腾了好几天才搞定,下面几个方案亲测可行,你可以挨个试试:
方案一:升级Firebase云函数的Node.js版本
这是最根本的解决办法,毕竟Nuxt 1.x+明确要求Node 8以上,而Firebase早就支持更高版本的Node了,你之前可能没配置对:
- 进入Firebase项目的
functions目录,找到package.json文件 - 在文件中添加(或修改)
engines字段,指定一个兼容的LTS版本,比如:
(注:Firebase目前支持Node 14、16这类稳定LTS版本,尽量别选太新的版本,避免依赖兼容问题)"engines": { "node": "14" } - 确保你的
firebase-tools是最新版,终端运行:npm install -g firebase-tools - 最后重新部署云函数:
firebase deploy --only functions
方案二:调整Babel配置,转译所有必要代码
如果暂时没法升级Node版本(比如项目里有老依赖和高版本Node冲突),那得让Babel把Nuxt相关的依赖代码也转译了——默认Babel只会处理你自己写的源码,不会碰node_modules,但Nuxt的依赖里大量用了Node 8+的语法:
- 在
functions目录下创建或修改babel.config.js,配置如下:module.exports = { presets: [ [ '@babel/preset-env', { targets: { node: '6.11.1' }, useBuiltIns: 'usage', corejs: 3 } ] ], // 把Nuxt相关的核心包加入转译列表 include: [ './node_modules/nuxt/**/*', './node_modules/@nuxt/**/*', './node_modules/vue-server-renderer/**/*', './node_modules/vue-template-compiler/**/*' ] }; - 安装必要的Babel依赖:
npm install @babel/core @babel/preset-env core-js@3 @babel/register --save-dev - 在云函数的入口文件开头,先注册Babel转译:
// 先注册Babel require('@babel/register')({ configFile: './babel.config.js', extensions: ['.js', '.jsx', '.es6', '.es', '.mjs'] }); // 再引入Nuxt相关代码 const { Nuxt, Builder } = require('nuxt'); - 重新部署云函数测试
方案三:备选——改用Nuxt静态生成(如果SSR非必须)
如果上面两个方案都走不通,而你的业务场景允许静态页面的话,可以绕开SSR,改用Nuxt的静态生成模式:
- 在
nuxt.config.js里设置target: 'static' - 运行
npm run generate生成静态文件,产物会在dist目录里 - 把
dist目录部署到Firebase Hosting,这样就完全不需要云函数的SSR能力,自然也不会有Node版本冲突的问题了
内容的提问来源于stack exchange,提问作者Jefry Dewangga
相关产品推荐
相关产品推荐

