环境变量不适用于带有 Nuxt 的 Vercel

Posted

技术标签:

【中文标题】环境变量不适用于带有 Nuxt 的 Vercel【英文标题】:Environment variables not working on Vercel with Nuxt 【发布时间】:2021-10-01 23:58:27 【问题描述】:

我在访问部署在 Vercel 上的环境变量时遇到问题。 在我的笔记本电脑的 localhost 上测试该站点时,它运行良好,但一旦部署到 Vercel 就无法运行。 我正在尝试访问我的componentsplugins 目录中的环境变量,我正在使用

computed: 
  config() 
    return
      bucketName: process.env.AWS_BUCKET_NAME,
      dirName: process.env.AWS_DIR_NAME_1,
      region: process.env.AWS_REGION_1,
      accessKeyId: process.env.AWS_ID,
      secretAccessKey: process.env.AWS_SECRET,
    
  
,

添加我的环境变量时选择了所有选项并且它们也暴露了

请问,可能是什么问题?


根据下面的建议,这是我尝试过的

nuxt.config.js

privateRuntimeConfig: 
  bucketName: process.env.AWS_BUCKET_NAME,
  dirName: process.env.AWS_DIR_NAME_1,
  region: process.env.AWS_REGION_1,
  accessKeyId: process.env.AWS_ID,
  secretAccessKey: process.env.AWS_SECRET,
,

在插件中

import Vue from 'vue'
import S3 from "aws-s3";

export default ( $config:  bucketName, dirName, region, accessKeyId, secretAccessKey  ) => 
  Vue.mixin(
    methods:
      async uploadToS3(file) 
        const config = 
          bucketName,
          dirName,
          region,
          accessKeyId,
          secretAccessKey,
        
        console.log(bucketName, dirName, region, accessKeyId, secretAccessKey);

        const S3Client = new S3(config)
        let uploadedData = S3Client.uploadFile(file, this.getRandomName(30))
        return uploadedData
      
    
  )

当我console.log 的值时,我确实得到了undefined

未定义未定义未定义未定义未定义

【问题讨论】:

【参考方案1】:

您不应该访问这样的变量,而应该使用 publicRuntimeConfig 变量。

这是在 Nuxt 插件中使用环境变量的方法:https://***.com/a/67580298/8816585

这是在任何 Nuxt 应用程序中广泛使用它的方法:https://***.com/a/67705541/8816585

是的,这是您需要添加环境变量的地方:https://***.com/a/67389035/8816585

我希望你在本地使用.env 文件来测试一下?您能否添加更多详细信息以确保您以正确的方式执行此操作?

【讨论】:

再次感谢您的回复,我尝试了您推荐的内容,但未定义,我已经用我尝试过的内容和结果更新了问题 @OpeyemiOdedeyi 我谈过publicRuntimeConfig 而不是privateRuntimeConfig 是有原因的。 Private 只能在服务器上使用(纯 node.js 函数,nuxtServerInit 等)。对于您的变量,您需要将它们放在公共变体中。因为这些将在客户端上可用,但您只能将“公共”环境变量传递给客户端。归根结底,这些变量并不是那么秘密,因为它们可能是为了由前端使用。对于一些真正需要私有的变量,您需要一个后端中间件或类似的东西来隐藏它们。

以上是关于环境变量不适用于带有 Nuxt 的 Vercel的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vercel zeit 上使用 Tailwindcss 2.0 部署 nuxt.js 项目

Vercel ES 模块上的 Nuxt3/threejs+troisjs 部署错误

Nuxt:标题功能不适用于标题或元标记

自定义提取器不适用于 Nuxt PurgeCSS

Tailwind+ Nuxt:@apply 不适用于所有课程

Vuex Mutation 不适用于 Nuxt.js