这是我的 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';
顺便说一句,我遇到了同样的问题。我想在一个公共项目下将多个 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
键或调用脚本的任何手动命令也应该这样做。取决于您的设置。
您也可以使用
nitro
中的 nuxt.config.ts
选项执行此操作:
export default defineNuxtConfig({
//...
nitro: {
replace: {
['export { s as server }']: 'export { s as custom-server-name }'
}
}
})
替换键是一个对象,其中键是要替换的字符串,值是要替换的字符串值。
我认为它在引擎盖下使用 Rollup 替换插件。