首页 > 其他分享 >Nuxt.js 环境变量配置与使用

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

时间:2024-07-25 16:08:31浏览次数:6  
标签:cmdragon js Blog env local 环境变量 Nuxt


title: Nuxt.js 环境变量配置与使用
date: 2024/7/25
updated: 2024/7/25
author: cmdragon

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

categories:

  • 前端开发

tags:

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

image
image

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

环境变量是配置应用程序的一种常见方式,特别是在不同的环境(如开发、测试、生产)中管理不同的配置值时。在 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

往期文章归档:

标签:cmdragon,js,Blog,env,local,环境变量,Nuxt
From: https://www.cnblogs.com/Amd794/p/18323412

相关文章

  • C#读取指定json配置文件
    在C#开发中,有时候我们需要从JSON文件中读取配置或数据。本文将介绍一个简单的方法,使用Newtonsoft.Json库来读取指定的JSON文件并进行反序列化操作。读取json配置文件的源码取自SqlSugar作者的ReZero开源项目:https://gitee.com/DotNetNext/ReZero1.准备工作首先,我们需要使用NuGe......
  • 基于JSP、java、Tomcat三者的项目实战--校园交易网(1)-项目搭建(前期准备工作)
    这是项目的初始页面接下来我先写下我的初始项目搭建技术支持:JAVA、JSP服务器:TOMCAT7.0.86编程软件:IntelliJIDEA2021.1.3x64首先我们打开页面,准备搭建项目的初始准备1.NewProject2.随后点击Next,勾选Createprojectfromtemplate,再点击Next3.给自己的项目命名......
  • 倒计时关闭的JS 公告
    这是一个简洁高效的公告通知系统,它能够帮助您在个人博客中迅速传达重要更新、临时公告或其他关键信息给每一位访问者,确保他们能及时获取最新的站点动态。随着网络世界的日新月异,与读者保持有效沟通成为提升用户体验的关键环节之一。为了更好地服务于广大读者朋友,我在博客中集成了......
  • Qt - XML和JSON
    1.XML1.1简介可扩展标记语言,标准通用标记语言(ExtensibleMarkupLanguage)的子集,简称XML,是一种定义电子文档结构和描述其内容的国际标准语言,被设计用来传输和存储数据。可扩展标记语言与Access],Oracle]和SQLServer等数据库不同,数据库提供了更强有力的数据存储和分析能力,例......
  • JSON 响应中的字符串值变成 Python pandas datafram 中的数值
    我正在使用Python从RESTAPI中提取数据并将其存储在SQL数据库中。除了响应中的一个JSON值之外,一切工作正常。JSON响应[{"pbxId":"XXXcxx","site":"XXXGroup-SydneyOffice","name":"XXXXService","extension":......
  • 基于springboot+vue.js+uniapp的小程序的英语学习交流平台附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 抖音直播弹幕数据逆向:websocket和JS注入
    ......
  • shell 中设置/取消环境变量
    shell中设置/取消环境变量查看:env设置:export变量名=变量值删除:unset变量名https://blog.csdn.net/mayue_web/article/details/97023615https://www.cnblogs.com/guanbin-529/p/12977662.htmlhttps://cloud.tencent.com/developer/article/1630467https://developer.ali......
  • 如何使用 JSON 进行数据交换 ?
    JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON的设计灵感来自于JavaScript的对象表示法,但它与编程语言无关,几乎所有现代编程语言都提供了对JSON的支持。JSON已成为Web应用程序中数据交换的事实标准。JSON......
  • 带有 CDK 的 Lambda 无法启动 - JSONDecodeError 和 BrokenPipeError
    我正在尝试部署一个基于图像的PythonLambda,其中包含AWSCDK库。当我尝试在AWS中运行该函数时,它无法启动。我正在使用此Dockerfile:FROMamazon/aws-lambda-python:3.12COPY*${LAMBDA_TASK_ROOT}/RUNdnfupdate-yRUNdnfinstall-ygitRUNcurl-sLhttps......