如何访问 Nuxt 插件中的 .env 变量?

How to access .env variables in a Nuxt plugin?

Segment Analytics 提供了一个带有秘密 API 密钥的片段。在我的 Nuxt.js 项目中,我创建了一个名为 segment.js 的插件,我在 nuxt.config.js:

中注册了它

nuxt.config.js

plugins: [
  {
    src: "~/plugins/segment.js",
    mode: 'client'
  }
]

在我的 plugins/segment.js 文件中有我的代码片段:

!function(){var analytics=window.analytics=...analytics.SNIPPET_VERSION="4.13.2";
analytics.load(process.env.SEGMENT_API_SECRET);
analytics.page();
}}();

显然我不想让我的秘密 API 密钥暴露在那里,所以我将它存储在我的 .env 文件中:

.env

SEGMENT_API_SECRET=FR4....GSDF3S

问题:plugins/segment.js 中的 process.env.SEGMENT_API_SECRETundefined,因此代码段不起作用。如何从我的插件 plugins/segment.js 访问我的 .env 变量 SEGMENT_API_SECRET

将环境变量设置为 nuxt.config.js

export default {
  publicRuntimeConfig: {
    segmentApiSecret: process.env.SEGMENT_API_SECRET,
  }
}

然后,这个应该可以解决问题

// segment.js
export default ({ $config: { segmentApiSecret } }) => {
  !function(){var analytics=window.analytics=...analytics.SNIPPET_VERSION="4.13.2";
  analytics.load(segmentApiSecret);
  analytics.page();
  }}();
}

更新:我的更深入的回答也可以是found here

对我来说,我想在我的 Nuxt Firebase 插件中使用我的环境 (.env) 变量:/plugins/firebase.js。通常在 Vue 中,你必须在这些 .env 变量前加上 VUE_APP_ 前缀,例如:VUE_APP_yourKeyName=YOUR_SECRET_VALUE

但是对于 Nuxt,您必须在 Nuxt Config nuxt.config.js 中设置这些 .env 变量,如下所示:

// .env
VUE_APP_yourKeyName=YOUR_SECRET_VALUE
// nuxt.config.js
export default {
    env: {
        NUXT_VAR_NAME: process.env.VUE_APP_yourKeyName,
    },
}
// /plugins/firebase.js
const firebaseConfig = {
    apiKey: process.env.NUXT_VAR_NAME,
}

您可以阅读有关使用 Nuxt Environment Variables here 的更多信息。

NOTE: For Nuxt versions > 2.12+, in cases where environment variables are required at runtime (not build time) it is recommended to replace the env property with runtimeConfig properties : publicRuntimeConfig and privateRuntimeConfig.