Nuxt.js 环境变量配置与使用


title: Nuxt.js 环境变量配置与使用

date: 2024/7/25

updated: 2024/7/25

author: cmdragon

excerpt:

摘要:"该文探讨了Nuxt.js框架下环境变量配置的详细过程,涉及.env文件配置、运行时访问、安全性考量、在不同场景下的实践(如Vue应用、插件、服务器路由)及多环境配置下的最佳实践。"

categories:

  • 前端开发

tags:

  • Nuxt.js
  • 环境变量
  • 配置管理
  • 运行时配置
  • 安全性
  • TypeScript
  • 多环境部署


扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

环境变量是配置应用程序的一种常见方式,特别是在不同的环境(如开发、测试、生产)中管理不同的配置值时。在 Nuxt.js

中,环境变量可以通过.env文件来设置,并在应用程序中读取。以下是对您提供信息的总结和解释:

环境变量配置

  1. .env文件

    • Nuxt CLI 支持在开发、构建和生成过程中读取.env文件。
    • 当运行构建后的服务器时,不会读取.env文件。
  2. 环境变量要求

    • 变量必须在nuxt.config中定义,以避免环境变量直接暴露给应用程序代码。
    • 只有以NUXT_开头的大写环境变量,并且使用_分隔键和大小写变化的环境变量可以覆盖运行时配置属性。
  3. 示例

    • .env文件内容:

      复制代码
      NUXT_API_SECRET=api_secret_token
      NUXT_PUBLIC_API_BASE=https://nuxtjs.org
    • nuxt.config.ts配置:

      复制代码
      export default defineNuxtConfig({
        runtimeConfig: {
          apiSecret: '', // 可以由 NUXT_API_SECRET 环境变量覆盖
          public: {
            apiBase: '', // 可以由 NUXT_PUBLIC_API_BASE 环境变量覆盖
          }
        },
      });

读取运行时配置

  1. 在 Vue 应用中

    • 使用useRuntimeConfig()方法来访问运行时配置。
    • 在客户端,只有runtimeConfig.public中的键可用,并且是可写和响应式的。
    • 在服务器端,整个运行时配置都可用,但它是只读的。
  2. 示例

    • pages/index.vue页面:

      复制代码
      <script setup>
      const config = useRuntimeConfig()
      
      console.log('运行时配置:', config)
      if (process.server) {
        console.log('API 密钥:', config.apiSecret)
      }
      </script>
      
      <template>
        <div>
          <div>请检查开发者控制台!</div>
        </div>
      </template>

安全提示

  • 不要通过渲染或传递给useState来暴露运行时配置键给客户端。

插件中使用运行时配置

  • 在自定义插件中,可以在defineNuxtPlugin函数内部使用useRuntimeConfig()

  • 示例:plugins/config.ts

    复制代码
    export default defineNuxtPlugin((nuxtApp) => {
      const config = useRuntimeConfig()
    
      console.log('API 基础 URL:', config.public.apiBase)
    });

服务器路由中使用运行时配置

  • 在服务器路由中,可以使用useRuntimeConfig访问运行时配置。

  • 示例:server/api/test.ts

    复制代码
    export default defineEventHandler(async (event) => {
      const { apiSecret } = useRuntimeConfig(event)
      const result = await $fetch('https://my.api.com/test', {
        headers: {
          Authorization: `Bearer ${apiSecret}`
        }
      })
      return result
    })

对运行时配置进行类型定义

  • Nuxt 尝试自动生成 TypeScript 接口,但也可以手动添加类型。

  • 示例:index.d.ts

    复制代码
    declare module 'nuxt/schema' {
      interface RuntimeConfig {
        apiSecret: string
      }
      interface PublicRuntimeConfig {
        apiBase: string
      }
    }
    // 当增强类型时,确保始终导入/导出某些内容是很重要的
    export {}

指定不同环境的配置

创建自定义环境文件

复制代码
首先,你需要创建一个自定义的环境文件,例如 `.env.local`。这个文件应该包含你希望在开发环境中使用的环境变量。

```
# .env.local
MY_VARIABLE=my_value

```

使用--dotenv参数启动 Nuxt 开发服务器

使用npx nuxi dev --dotenv .env.local命令来启动 Nuxt 开发服务器,并指定要加载的环境文件为.env.local

复制代码
```
npx nuxi dev --dotenv .env.local

```

这条命令会执行以下操作:

-   加载 `.env.local` 文件中的环境变量。
-   将这些环境变量添加到 `process.env` 对象中。
-   启动 Nuxt 开发服务器。

自动重启机制

在开发模式下,Nuxt 会监视.env.local文件的变化。如果你修改了.env.local文件并保存,Nuxt 会自动检测到这些变化,并重启开发服务器以应用新的环境变量值。

复制代码
这意味着你不需要手动重启服务器,Nuxt 会自动完成这一步骤,确保你的环境变量始终是最新的。

示例

假设你有一个.env.local文件,内容如下:

复制代码
# .env.local
API_URL=http://localhost:3000/api
DEBUG_MODE=true

你可以使用以下命令启动 Nuxt 开发服务器:

复制代码
npx nuxi dev --dotenv .env.local

在开发过程中,如果你修改了.env.local文件,例如将DEBUG_MODE改为false

复制代码
# .env.local
API_URL=http://localhost:3000/api
DEBUG_MODE=false

保存文件后,Nuxt 会自动检测到变化并重启服务器,使新的环境变量生效。

i .env.local changed, restarting server...

i server restarted.

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:Nuxt.js 环境变量配置与使用 | cmdragon's Blog

往期文章归档:

相关推荐
gis开发之家8 小时前
vue3直击架构痛点 依赖倒置与接口隔离——打造坚如磐石的插件与高阶组件(HOC)模式
javascript·架构·typescript·前端框架·vue3
冬枳8 小时前
基于OpenSeagragon封装的前端病理切片展示组件
前端·typescript
退休倒计时12 小时前
【每日一题】LeetCode 287. 寻找重复数 TypeScript
算法·leetcode·typescript
@@@@@@@@542 天前
JavaScript 的缺点与 TypeScript 的弥补
开发语言·javascript·typescript
用户0934077735142 天前
HarmonyOS WPS Open SDK 实践:最小打开闭环与 enableEdit 分支处理
typescript·harmonyos
柯克七七2 天前
我把 bug 修得太干净了,测试组以为这个模块本来就没问题
前端·javascript·typescript
退休倒计时2 天前
【每日一题】LeetCode 39. 组合总和 TypeScript
算法·leetcode·typescript
yyt3630458412 天前
KlineChartQuant Tooltip 高频交互 200FPS 性能优化完整复盘
前端·经验分享·性能优化·typescript·vue·交互·chrome devtools
用户0934077735143 天前
HarmonyOS WPS Open SDK 实践:办公审批附件「打开—编辑—回传」代码实现
typescript·harmonyos
Flynt3 天前
TypeScript 5.8 让我少踩了一个大坑,顺手再聊聊 --erasableSyntaxOnly
前端·javascript·typescript