如何使用 nitro 在 nuxt 3 中重命名 firebase 函数?

问题描述 投票:0回答:2

这是我的 nuxt.config.js

// https://nuxt.com/docs/api/configuration/nuxt-config
// eslint-disable-next-line no-undef
export default defineNuxtConfig({
  preset: 'node-server',
  modules: [
    '@nuxtjs/tailwindcss',
  ],
  nitro: {
    preset: 'firebase',
  },
  srcDir: './src',
});

我想将默认为服务器的功能名称更改为其他名称。 nitro 或 nuxt 配置中似乎没有选项可以做到这一点。

在第4行的.output/server/index.mjs中,默认导出名称为server

// line 4
export { s as server } from './chunks/nitro/firebase.mjs';
google-cloud-functions nuxt.js nitro nuxt3
2个回答
2
投票

顺便说一句,我遇到了同样的问题。我想在一个公共项目下将多个 nuxt3 应用程序作为网站部署在 firebase 托管上。但是我需要为每个 nuxt 应用程序设置一个“服务器”功能。据说具有与我的托管配置相匹配的唯一名称。 现在,每次我部署任何 nuxt 托管时,“服务器”云功能都会被覆盖。 @jofftiquez 是你要解决的同一个问题吗?

我能够更改函数名称来修补构建命令生成的输出/服务器/index.mjs 文件(实际上我使用带有正则表达式的预部署脚本来做到这一点): 来自

export { s as server } from './chunks/nitro/firebase.mjs'

export { s as custom-server-name } from './chunks/nitro/firebase.mjs'

然后在 firebase.json 中我配置了我的自定义函数名称:

  "functions": {
    "source": ".output/server",
    "runtime": "nodejs16"
  },
  "hosting": [
    {
      "target": "dev",
      "public": ".output/public",
      "cleanUrls": true,
      "rewrites": [
        {
          "source": "**",
          "function": "custom-server-name"
        }
      ]
    },

我能够部署函数“custom-server-name”:

firebase deploy --only functions:custom-server-name --project=default

这是迄今为止我找到的唯一方法。 您可以在 firebase.json 中

codebase
下的
functions
键中进行调查。如果你从单独的仓库部署它是有用的。

我的脚本存根:

//something like that...
import { readFile, readFileSync, writeFileSync } from 'node:fs'

const env = process.env
// Read deployment config from firebase.json and extract custom function name
const firebaseJSON = JSON.parse(readFileSync('firebase.json'))

//... I extract the rewrites server name from firebase.json based on the target name I extract from env variables

// Read file into a string
readFile('.output/server/index.mjs', 'utf-8', (errRead, contents) => {
  if (errRead) {
    return console.error(errRead)
  }
  console.log('Found index.mjs file contents: ', contents)

  const updated = contents.replace(
    /{ s as server }/gi,
    `{ s as ${serverFunctionName} }`
  )

  // Write back to file
  console.log(
    `Replacing nuxt server function name with':  '${serverFunctionName}'`
  )
  writeFileSync('.output/server/index.mjs', updated, 'utf-8', (errWrite) => {
    if (err) {
      console.log(err)
    }
  })

目前我将上面的脚本移动到我的管道脚本中并在之前运行它

firebase deploy

firebase.json 中的

function: predeploy
键或调用脚本的任何手动命令也应该这样做。取决于您的设置。


0
投票

您也可以使用

nitro
中的
nuxt.config.ts
选项执行此操作:

export default defineNuxtConfig({

  //...
  nitro: {
    replace: {
      ['export { s as server }']: 'export { s as custom-server-name }'
    }
  }

})

替换键是一个对象,其中键是要替换的字符串,值是要替换的字符串值。

我认为它在引擎盖下使用 Rollup 替换插件。

© www.soinside.com 2019 - 2024. All rights reserved.