【Vue3】Vue3 + TypeScript 中如何區分開發和生產環境的 API 地址(支持 axios 請求

Vue3 + TypeScript 中如何區分開發和生產環境的 API 地址(支持 axios 請求)

在實際項目開發中,我們通常會遇到以下需求:

  • 本地開發時訪問的是本地 API(如 http://localhost:3000);
  • 上線打包后訪問的是正式環境 API(如 https://api.example.com);

本文將介紹如何在 Vue 3 + TypeScript + Vite 項目中,優雅地使用不同的 API 地址,支持 axios 請求,并通過環境變量配置讓項目更清晰、靈活和易維護。


🔧 技術棧

  • Vue 3
  • TypeScript
  • Vite 構建工具
  • Axios(HTTP 請求庫)

🚀 項目背景

假設你有一段代碼如下:

const response = await axios.get(`http://ip:port/api/download-font/${fontName}`, {responseType: 'blob'
});

這段代碼在開發環境可以正常使用,但一旦上線到生產環境,就無法動態切換 API 地址。這將導致部署失敗或者前端資源訪問錯誤。


? 正確做法:使用環境變量動態配置 API 地址

1?? 配置環境變量文件

在項目根目錄下創建以下兩個文件:

.env.development
VITE_API_BASE_URL=http://localhost:3000
.env.production
VITE_API_BASE_URL=https://api.example.com

💡注意事項:

  • 文件名必須是 .env.環境名,對應 vite 中的 mode。
  • 變量名必須以 VITE_ 開頭,才能在代碼中訪問。

2?? 在代碼中使用環境變量

Vite 提供了 import.meta.env 方式訪問環境變量:

const response = await axios.get(`${import.meta.env.VITE_API_BASE_URL}/api/download-font/${fontName}`,{responseType: 'blob'}
);

這樣,當你運行 npm run dev 時,會自動使用開發地址;
當你執行 npm run build 時,Vite 會自動加載生產環境配置。


3?? 可選優化:封裝 Axios 實例

為了代碼更加規范,我們可以統一封裝一個 axios 實例。

src/utils/axios.ts
import axios from 'axios';const request = axios.create({baseURL: import.meta.env.VITE_API_BASE_URL,timeout: 10000,
});export default request;
使用方式:
import request from '@/utils/axios';const response = await request.get(`/api/download-font/${fontName}`, {responseType: 'blob'
});

這樣即使以后 API 地址變更,也只需修改環境變量即可,項目結構更加清晰。


🎯 最終目錄結構示例

├── .env.development
├── .env.production
├── src
│   ├── utils
│   │   └── axios.ts
│   ├── views
│   │   └── DownloadPage.vue

🛠? 常見問題

?為什么要以 VITE_ 開頭?

Vite 出于安全性考慮,只會將 VITE_ 開頭的變量注入到客戶端環境中。否則你定義了環境變量,代碼里是訪問不到的。


📦 構建與運行

  • 開發環境:

    npm run dev
    
  • 構建生產包:

    npm run build
    

Vite 會根據 NODE_ENV 自動加載對應 .env.xxx 文件。


🧠 總結

本文介紹了如何在 Vue 3 + TypeScript 項目中,通過 Vite 的環境變量機制區分開發和生產環境的 API 地址,并結合 axios 統一封裝,提高項目的可維護性和擴展性。

📌 不要硬編碼 IP 地址,使用 .env 文件配置才是最佳實踐!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907396.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907396.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907396.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構】線性表之“雙鏈表(帶頭循環雙向鏈表)”

- 第 99 篇 - Date: 2025 - 05 - 25 Author: 鄭龍浩/仟墨 【數據結構】 續上一篇: 線性表之“單鏈表” 文章目錄 “雙鏈表(帶頭雙向循環鏈表)” 的實現:分步解釋所有函數:test.cDListNode.hDListNode.c “雙鏈表(帶頭雙向循環鏈表…

【學習筆記】Transformer

學習的博客(在此致謝): 初識CV - Transformer模型詳解(圖解最完整版) 1 整體結構 Transformer由Encoder和Decoder組成,分別包含6個block。 Transformer的工作流程大體如下: 獲取每個單詞的em…

[MMU]IOMMU的主要職能及詳細的驗證方案

IOMMU的主要職能及詳細的驗證方案 摘要:IOMMU(Input/Output Memory Management Unit)是一種硬件組件,負責管理I/O設備對內存的直接訪問(DMA,Direct Memory Access),其主要作用是提供…

動物類 如何使用Yolov11訓練使用牛羊數據集 實現對牛羊進行檢測數據集

牛羊檢測數據集 3700張 平視視角牛羊檢測 帶標注 voc yolo 牛羊檢測數據集 3700張 牛羊檢測平視 帶標注 voc yolo 分類名: (圖片張數,標注個數) cattle: (1395,4309) sheep: (2393,1 1205) 總數: (3791, 15514) 總類(nc): 2類 以…

搭建frp內網穿透

前言 內網穿透的原理我就不多說了哈,既然會看到我這篇文章,想必都知道內網穿透是做什么的吧 frp分為服務端和客戶端,服務端一般是搭在公網服務器中,客戶端一般搭在本地或者局域網,需要提前在服務端搭好ftp server&am…

Tailwind CSS 實戰,基于 Kooboo 構建 AI 對話框頁面(四):語音識別輸入功能

基于前三章的內容,開發AI 對話框語音識別輸入功能: Tailwind css實戰,基于Kooboo構建AI對話框頁面(一)-CSDN博客 Tailwind css實戰,基于Kooboo構建AI對話框頁面(二):實…

ollama list模型列表獲取 接口代碼

ollama list模型列表獲取 接口代碼 curl http://localhost:11434/v1/modelscoding package hcx.ollama;/*** ClassName DockerOllamaList* Description TODO* Author dell* Date 2025/5/26 11:31* Version 1.0**/import java.io.BufferedReader; import java.io.InputStreamR…

ISOLAR軟件生成報錯處理(五)

錯誤1 An error has occurred. See error log for more details. java.lang.NullPointerException 這東西不用管&#xff0c;不影響生成 錯誤2 Description Resource Path Location Type Target ARObject: <xxxx> CompuMethod used for floating-point data conversi…

前端開發定時,ES學習,java集合

1.前端vue3加入定時任務&#xff1a; import { onMounted, ref,onUnmounted } from vue;//初始化&#xff0c;結束調用部分引用let timer: any;//定時器onMounted(async () > {timer setInterval(() > {open()//需要定時的任務}, 60000)//一分鐘調用一次}); onUnmounte…

Photoshop2025(PS2025)軟件及安裝教程

在數字圖像編輯領域&#xff0c;Adobe Photoshop 一直是無可爭議的王者。如今&#xff0c;Photoshop 2025 重磅登場&#xff0c;再次為我們帶來了驚喜與變革&#xff0c;進一步鞏固了它在行業中的領先地位。 Photoshop 2025 在人工智能方面的升級令人矚目。其全新的 “Magic Se…

【SQL Server Management Studio 連接時遇到的一個錯誤】

第一次用SQL Server Management Studio啟動之后第一步就是要建立連接 但是不知道Server Name要填什么&#xff0c;看了網上的教程說是要找到下面這個注冊表中對應的實例名稱填上去&#xff0c;或者前面加localhost 但是好像都沒有用&#xff0c;一直遇到報錯如下&#xff1a;…

高等數學基礎(向量矩陣及其創建和特殊的矩陣)

向量 向量是機器學習最底層的組成部分, 也是基礎數據的表示形式, 線性代數通過將研究對象拓展到向量, 對多維數據進行統一研究, 而進化出的方法方便我們可以研究和解決真實世界中的問題 標量 標量也稱為"無向量", 使用一個單獨的數表示數值大小, 可以有正負之分, …

IBM DB2數據庫管理工具IBM Data Studio

一、介紹 IBM Data Studio 是 IBM 提供的一個集成開發環境&#xff08;IDE&#xff09;&#xff0c;用于支持數據管理、開發、優化和管理數據庫應用程序&#xff0c;特別是在 IBM Db2 和其他數據庫平臺上。它提供了許多功能&#xff0c;以幫助開發人員和數據庫管理員提高生產力…

Java異常處理的全面指南

Java異常處理的全面指南 一、Java異常的基礎概念1.1 什么是異常1.2 異常類的層次結構 二、Java異常的處理方式2.1 try-catch塊2.2 throws關鍵字2.3 throw關鍵字 三、自定義異常3.1 自定義受檢異常3.2 自定義非受檢異常 四、Java異常處理的最佳實踐4.1 捕獲合適粒度的異常4.2 避…

MediaMtx開源項目學習

這個博客主要記錄MediaMtx開源項目學習記錄,主要包括下載、推流(攝像頭,MP4)、MediaMtx如何使用api去添加推流,最后自定義播放器,播放推流后的視頻流,自定義Video播放器博客地址 1 下載 MediaMTX MediaMTX 提供了預編譯的二進制文件,您可以從其 GitHub 頁面下載: Gi…

【unity游戲開發——編輯器擴展】EditorApplication公共類處理編輯器生命周期事件、播放模式控制以及各種編輯器狀態查詢

注意&#xff1a;考慮到編輯器擴展的內容比較多&#xff0c;我將編輯器擴展的內容分開&#xff0c;并全部整合放在【unity游戲開發——編輯器擴展】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言一、監聽編輯器事件1、常用編輯器事件2、示例監聽播放模…

Spring Boot+Activiti7入坑指南初階版

介紹  Activiti 是一個輕量級工作流程和業務流程管理 (BPM) 平臺,面向業務人員、開發人員和系統管理員。其核心是一個超快且堅如磐石的 Java BPMN 2 流程引擎。它是開源的,并根據 Apache 許可證分發。Activiti 可以在任何 Java 應用程序、服務器、集群或云中運行。它與 Spri…

VoltAgent 是一個開源 TypeScript 框架,用于構建和編排 AI 代理

?一、軟件介紹 文末提供程序和源碼下載 VoltAgent 是一個開源 TypeScript 框架&#xff0c;用于構建和編排 AI 代理 二、什么是 VoltAgent&#xff1f; AI 代理框架提供了構建由自主代理提供支持的應用程序所需的基礎結構和工具。這些代理通常由大型語言模型 &#xff08;&am…

《仿盒馬》app開發技術分享-- 訂單詳情頁(端云一體)

開發準備 在之前的章節中我們實現了訂單的提交&#xff0c;以及提交之后跳轉到確認訂單頁面&#xff0c;在確認訂單頁面我們添加了一個入口&#xff0c;這個入口是查詢訂單&#xff0c;當我們點擊入口時&#xff0c;我們需要跳轉到一個新的界面&#xff0c;這個界面通過接收上…

傳統項目管理總拖延?Scrum敏捷全流程拆解

在互聯網高速發展的時代&#xff0c;企業競爭的核心要素正逐漸向 "速度" 傾斜。市場環境瞬息萬變&#xff0c;用戶需求呈現出多元化、動態化的顯著特征&#xff0c;而傳統管理模式固有的滯后性與僵化性&#xff0c;已難以匹配快速迭代的市場需求。在此背景下&#xf…