发布时如何自动替换 API 接口地址? 南宫丹丹 提问于 2026-03-18 16:26:20 阅读 13 前端 我们开发环境用的是 http://localhost:3000/api,但上线要换成 https://prod.example.com/api。每次手动改太麻烦还容易出错,有没有办法在构建或发布时自动切换? 试过在 webpack 里配 DefinePlugin,但只对 JS 生效,axios 的 baseURL 写在 config 文件里好像没被替换到。 发布流程 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 郭云 Lv1 这个问题我当时也卡了很久,DefinePlugin 确实只能替换 JS 代码里的字面量,你得保证 axios 配置里用的是 process.env.XXX 这种形式,而不是直接写死。 最靠谱的方案是用 .env 文件配合 webpack 的 DefinePlugin: 第一步,创建环境变量文件 在项目根目录建两个文件: .env.development 内容是: VUE_APP_API_BASE_URL=http://localhost:3000/api .env.production 内容是: VUE_APP_API_BASE_URL=https://prod.example.com/api (如果你用的不是 Vue 是其他框架,把 VUE_APP_ 改成你框架约定的前缀就行,React 用 REACT_APP_,普通项目用自定义的) 第二步,修改 webpack 配置 在 webpack 的 plugins 里这样配: const webpack = require('webpack'); const dotenv = require('dotenv');const env = process.env.NODE_ENV === 'production' ? dotenv.config({ path: '.env.production' }) : dotenv.config({ path: '.env.development' }); module.exports = { plugins: [ new webpack.DefinePlugin({ 'process.env': JSON.stringify(env.parsed) }) ] }; 第三步,axios 配置里这样用 import axios from 'axios'; const api = axios.create({ baseURL: process.env.VUE_APP_API_BASE_URL || '/api', timeout: 10000 }); export default api; 这样开发时 npm run dev 自动读 .env.development,打包时 npm run build 自动读 .env.production,完全不用手动改。 还有一个偷懒的办法,如果你用的是 Vue CLI 或者 Create React App 这种脚手架,直接在 package.json 的 scripts 里指定环境变量: { "scripts": { "dev": "cross-env NODE_ENV=development dotenv -e .env.development vue-cli-service serve", "build": "cross-env NODE_ENV=production dotenv -e .env.production vue-cli-service build" } } 脚手架会自动把 VUE_APP_ 开头的变量注入到 process.env 里,axios 配置那边不用动。 你自己试一下,有问题再问。 回复 点赞 2026-03-18 17:00 加载更多 相关推荐 2 回答 46 浏览 Nessus扫描前端API接口总报高危漏洞,但实际没问题怎么办? 我在用Nessus扫描公司新开发的前端项目API接口时,发现/user/profile接口一直被标记为"反射型XSS漏洞"高危,但手动测试完全没问题。 已经尝试过: 1. 在扫描配置里排除了/user... ლ宏春 安全 2026-02-03 15:11:36 1 回答 21 浏览 REST API 返回的数据结构不一致该怎么处理? 我在调用后端的 REST API 时,发现有些接口成功返回的是 { data: {...} },但有的直接返回对象本身,比如 { id: 1, name: 'xxx' }。这导致前端统一拦截器里不好处... 清梅 Dev 框架 2026-03-14 10:00:23 2 回答 21 浏览 Deskgap 中如何正确调用原生 API 打开系统文件选择框? 我正在用 DeskGap 开发一个桌面应用,想通过原生 API 调用系统文件选择对话框,但文档看得有点懵。试了 deskgap.dialog.showOpenDialog,结果控制台报错说 dialo... 付楠 框架 2026-03-05 17:17:18 2 回答 22 浏览 Jira API 创建 Issue 时如何指定自定义字段? 我用 Jira 的 REST API 创建 Issue,普通字段比如 summary、issuetype 都能正常传,但一加自定义字段就报错。官方文档说要用 customfield_xxx 的格式,但... 之芳~ 工具 2026-03-01 19:49:21 2 回答 37 浏览 用 Lighthouse Node API 时怎么传入自定义的 Chrome 启动参数? 我正在用 Lighthouse 的 Node API 做自动化性能测试,想给 Chrome 加一些启动参数,比如 --no-sandbox 或者 --headless=new,但不知道该怎么传进去。试... 书生シ尚萍 工具 2026-02-25 23:43:19 2 回答 38 浏览 Next.js中怎么全局捕获API调用错误?ErrorBoundary没生效 我在Next.js 13项目里用getServerSideProps调API,但遇到接口报错时页面直接白屏了。按照文档写了组件包裹的ErrorBoundary,但错误信息没被捕获到,控制台只看到"Er... 书生シ银银 框架 2026-02-13 12:33:23 2 回答 30 浏览 如何避免请求队列中频繁API调用被限流? 我正在做一个实时数据同步功能,需要连续发送大量POST请求到API,但总被服务器限流返回429。我尝试用队列加setTimeout控制频率,但实际测试发现请求还是挤在一起发送了,代码哪里有问题? le... 闲人树珂 优化 2026-02-10 20:27:29 2 回答 42 浏览 灰盒测试时怎么发现后端API的输入验证漏洞? 最近在测试公司内部系统的灰盒安全,遇到个问题:我拿到后端API的接口文档,但不确定参数验证是否完善。比如有个用户注册接口,文档说username是必填项,但当我用Postman把username改成特... 小青 Dev 安全 2026-02-08 20:32:32 2 回答 58 浏览 如何在威胁建模中识别前端API的注入攻击风险? 最近在做威胁建模时发现前端调用的API可能存在注入攻击风险,但不确定该怎么具体分析。比如用第三方富文本库上传图片时,后台返回的Markdown内容直接渲染到页面,虽然加了输入过滤,但测试时发现特殊字符... 沐岩酱~ 安全 2026-02-06 19:48:30 2 回答 45 浏览 React中如何用缓存策略避免重复的API请求? 我在开发一个新闻列表页面时遇到问题,每次切换标签页再回来,组件都会重新发起API请求。虽然用了useMemo缓存了数据,但发现浏览器开发者工具里还是显示重复请求: useEffect(() =>... 欧阳柯汝 优化 2026-02-06 16:09:26
process.env.XXX这种形式,而不是直接写死。最靠谱的方案是用 .env 文件配合 webpack 的 DefinePlugin:
第一步,创建环境变量文件
在项目根目录建两个文件:
.env.development内容是:VUE_APP_API_BASE_URL=http://localhost:3000/api
.env.production内容是:VUE_APP_API_BASE_URL=https://prod.example.com/api
(如果你用的不是 Vue 是其他框架,把 VUE_APP_ 改成你框架约定的前缀就行,React 用 REACT_APP_,普通项目用自定义的)
第二步,修改 webpack 配置
在 webpack 的 plugins 里这样配:
第三步,axios 配置里这样用
这样开发时
npm run dev自动读 .env.development,打包时npm run build自动读 .env.production,完全不用手动改。还有一个偷懒的办法,如果你用的是 Vue CLI 或者 Create React App 这种脚手架,直接在 package.json 的 scripts 里指定环境变量:
脚手架会自动把
VUE_APP_开头的变量注入到process.env里,axios 配置那边不用动。你自己试一下,有问题再问。