首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

前端開發階段 URL 管理:避免硬編碼域名的最佳實踐

     編輯:程式設計綜合問答

前端項目在開發、測試、生產環境切換時,API 基礎 URL 常需變更。硬編碼完整域名會導致頻繁修改代碼。本文介紹通用的環境變量配置方案。

問題場景


// 開發環境
const apiUrl = 'https://dev.api.example.com/users';

// 生產環境部署時需手動改為
const apiUrl = 'https://api.example.com/users';

手動修改易出錯,且無法自動化構建。

解決方案:環境變量 + 構建工具注入

方案一:Vite / Webpack 定義全局常量


// vite.config.js
export default defineConfig({
  define: {
    'import.meta.env.API_BASE_URL': JSON.stringify(process.env.API_BASE_URL)
  }
})

// .env.development
API_BASE_URL=https://dev.api.example.com

// .env.production
API_BASE_URL=https://api.example.com

代碼中使用:


const apiUrl = `${import.meta.env.API_BASE_URL}/users`;

方案二:運行時配置(無需重新構建)


// public/config.js (部署時由運維替換)
window.APP_CONFIG = {
  API_BASE_URL: 'https://api.example.com'
};

// main.js 入口讀取
const API_BASE_URL = window.APP_CONFIG?.API_BASE_URL || '/api'; // 默認相對路徑

Docker/K8s 部署時通過 ConfigMap 掛載不同 config.js。

方案三:相對路徑 + 反向代理(最簡單)


// 開發環境 vite.config.js / webpack.config.js
devServer: {
  proxy: {
    '/api': {
      target: 'https://dev.api.example.com',
      changeOrigin: true,
      rewrite: path => path.replace(/^\/api/, '')
    }
  }
}

// 代碼中統一使用相對路徑
fetch('/api/users')  // 開發環境代理到後端,生產環境 Nginx 反向代理

優點: 代碼零配置,環境切換完全由基礎設施層處理。

JavaScript 歷史方案(兼容舊專案)


// config.js
const CONFIG = {
  development: { API_BASE: 'https://dev.api.example.com' },
  production:  { API_BASE: 'https://api.example.com' }
};

// 運行時判斷
const env = location.hostname === 'localhost' ? 'development' : 'production';
const API_BASE = CONFIG[env].API_BASE;

// 使用
const url = `${API_BASE}/users`;

最佳實踐總結

方案適用場景優點缺點
構建時注入現代項目類型安全、Tree-shaking、無運行時開銷環境變更需重構建
運行時配置容器化部署、多租戶不重構建切換環境需額外 HTTP 請求或內聯腳本
相對路徑+代理單體應用、前後端同域最簡單、零配置跨域場景需額外處理

避坑提醒

  • 不要在代碼中硬編碼 https://www.xxx.com
  • 敏感信息(密鑰、Token)絕不放入前端環境變量
  • 生產環境強制 HTTPS,開發環境可用 HTTP
  • API 版本號納入基礎路徑:/api/v1/

總結

前端 URL 管理核心原則:**代碼中零硬編碼,環境差異由配置/基礎設施層吸收**。現代項目首選 Vite/Webpack 構建時注入 + 相對路徑代理;容器化部署輔以運行時配置。告別手動修改域名,實現真正的「構建一次,到處部署」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved