Nuxt提供了一个运行时配置API,将配置暴露在你的应用程序和服务器路由中,可以在运行时通过设置环境变量来更新。定义运行时配置为了向应用程序公开配置和环境变量,您需要使用nuxt.config文件中的runtimeConfig选项定义运行时配置。exportdefaultdefineNuxtConfig({runtimeConfig:{//只能在服务器端访问的配置项apiSecret:'123',//可以暴露给客户端的配置项public:{apiBase:'/api'}}})required需要注意的一点是,默认定义的配置选项只能在服务器进程中访问。如果需要在客户端使用它们,需要在公共选项中定义配置项。定义配置项后,我们可以使用useRuntimeConfigApi获取定义的配置项的值。<脚本设置>construntimeConfig=useRuntimeConfig()console.log(runtimeConfig.apiSecret)console.log(runtimeConfig.public.apiBase)
在使用OptionsAPI时,我们还可以通过this.$config.public获取运行时配置。配置完成后再次运行程序,我们可以在终端控制台和浏览器控制台看到打印的配置项。终端显示服务器执行时打印的配置,可以看到已经成功获取值了。浏览器控制台打印的是客户端执行的结果。可以看出apiSecret的值是undefined,确实没有获取到。序列化运行时配置在传递给Nitro之前被序列化。这意味着任何不能序列化然后反序列化的东西(比如Functions、Sets、Maps等),都不应该在nuxt.config中设置。您可以将此代码放在Nuxt或Nitro插件或中间件中,而不是将不可序列化的对象或函数从nuxt.config传递到您的应用程序中。环境变量提供配置的最常用方法是使用环境变量。NuxiCLI内置支持在开发、构建和生成期间读取.env文件。但是当你运行你构建的服务器时,你的.env文件将不会被读取。运行时配置值会在运行时自动替换为匹配的环境变量,但有两个关键要求:您需要的变量必须在您的nuxt.config中定义。这可确保任意环境变量不会暴露给您的应用程序代码。只有特别命名的环境变量才能覆盖运行时配置属性。规则是以NUXT_开头的大写环境变量,并使用_分隔键和大小写更改。示例如下:NUXT_API_SECRET=api_secret_tokenNUXT_PUBLIC_API_BASE=https://nuxtjs.orgexportdefaultdefineNuxtConfig({runtimeConfig:{apiSecret:'',//此项会被NUXT_API_SECRET环境变量覆盖public:{apiBase:'',//此项会被NUXT_PUBLIC_API_BASE环境变量override覆盖}},})添加环境变量后需要重新运行项目才能生效。重新运行后,看到打印的值。可以发现已经成功获取环境变量。如何区分开发环境和实时环境NuxtCLI在开发模式和运行nuxibuild和nuxigenerate时内置了dotenv支持。除了任何进程环境变量外,如果项目根目录下有一个.env文件,它将在构建、开发和生成时自动加载,并且在那里设置的任何环境变量都将在nuxt.config文件和模块访问中可用.如果你想使用不同的文件,例如,使用.env.local或.env.production,你可以通过在使用nuxi时传递dotenv标志来实现。例如。npxnuxidev--dotenv.env.local如上所述,这仅适用于开发模式以及运行nuxibuild和nuxigenerate时。那么我们可以先在根目录下创建一个.env.local文件,覆盖文件中的其中一个变量然后进入package.json文件,修改dev命令如下:"scripts":{"build":"nuxtbuild","dev":"nuxtdev--dotenv.env.local",//指定启动开发模式时读取的环境变量配置文件"generate":"nuxtgenerate","preview":"nuxtpreview","postinstall":"nuxtprepare"},修改后,我们重新运行程序,在开发模式下可以看到.env.local中设置的环境变量已经生效。接下来我们可以执行npmrungenerate命令,看看打包时环境变量是如何被读取的。我们可以看到.env中的值还是符合我们的预期的。请广大读者朋友批评指正。联系作者:imwty2023(微信),iwhitney@163.com(邮箱)