Vue 新增不参与打包的接口地址配置文件
Vue 新增不参与打包的接口地址配置文件
by:授客 QQ:1033553122
开发环境
Win 10
Vue 2.5.2
问题描述
vue工程项目,npm run build webpack方式打包,每次打包后如果需要更改后台接口地址(项目中,接口地址设置成变量,存放在js文件中,需要用到的地方导入),都需要重新打包,比较麻烦,所以,想给项目增加个配置文件,打包后如果要更改接口地址,修改该文件即可。
解决方法
创建config.js
项目根目录/static目录下,创建config.js文件,内容如下:
;(function(env) {
// 开发环境接口服务器地址
const dev = {
API_BASE_URL:"http://localhost:8000"
}
// 线上环境接口服务器地址
const prod = {
API_BASE_URL:"http://10.xxx.xx.xx:8001"
}
if (env == "dev") {
return dev
} else if (env == "prod") {
return prod
}
})("dev")
修改main.js
import axios from "axios"
...略
let myConfigPath = "/static/config.js"
if (process.env.NODE_ENV === "development") {
myConfigPath = "../static/config.js"
}
axios.get(myConfigPath, { headers: { "Cache-Control": "no-cache" } }).then(response => {
Vue.prototype.$apiBaseURL = eval(response.data).API_BASE_URL
new Vue({
el: "#app",
router,
store, // 注入 store
components: { App },
template: "<App/>"
})
})
如上,先通过请求,获取config.js文件内容 response.data,然后通过eval(response.data)文件内容当做代码执行,进而获取js中函数返回的内容,即我们需要的配置,并挂载在Vue的prototype上,就可以在每个 Vue 的实例中使用。这里把vue创建实例放在获取config.js配置文件之后主要是因为axios异步请求的缘故。
注意,这里不能不能使用import,一定要发起网络请求,去请求这个js文件,否则build时,webpack会将此配置文件应当输出的值写死在压缩之后的js中,之后去动手修改dist/static中的配置文件就不起作用了。
另外,添加{ headers: { "Cache-Control": "no-cache" } }请求头,防止浏览器从磁盘缓存读取,导致后台更改了配置,前台读取的还是旧的文件。
npm run build后,config.js位于dist/static目录下,项目线上环境nginx 静态文件路由关键配置如下:
location / {
root /opt/TMP/frontend/dist; #这里的dist存放的就是上述打包的路径
...
实践表明,使用nginx部署的情况下,myConfigPath 不能设置为 "./static/config.js",只能设置为myConfigPath = "/static/config.js",即配置为绝对路径,否则刷新某些页面的情况下,会请求不到config.js
以下为配置myConfigPath 为 "./static/config.js"的情况下,执行二级页面的刷新操作(页面URL:http://10.1xx.xx.xx/testerView/testCaseManagement,根据我的项目程序设计,此操作会先访问二级路由页面testerView),查看nginx日志,发现如下,请求找不到:
引用配置
本例中,在自己封装的axios.js中使用该配置
import axios from"axios"
import Vue from "vue"
...略
function request(options) {
return new Promise((resolve, reject) => {
const instance = axios.create({
baseURL: Vue.prototype.$apiBaseURL,
headers:config.headers,
timeout:config.timeout,
withCredentials:config.withCredentials,
responseType:config.responseType
})
...略
Vue 新增不参与打包的接口地址配置文件的更多相关文章
- vue2+axios在不同的环境打包不同的接口地址
node.js的环境变量 process process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程.作为一个对象,它对于 Node.js 应用程序始终是可用 ...
- vue中打包生成可配置文件以便修改接口地址
vue打包上传到服务器之后,如果数据接口域名发生变化,需要手动修改接口地址,在发布的时候也麻烦,于是.. 在打包之后如果有一个json配置文件以便修改那不是方便很多 在网上找了一些方法貌似都是异步请求 ...
- VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址
转载地址: https://blog.csdn.net/gebitan505/article/details/58166055 VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址 前 ...
- 在webpack搭建的vue项目中如何管理好后台接口地址
在最近做的vue项目中,使用了webpack打包工具,以前在做项目中测试环境和生产环境的接口地址都是一样的,由于现在接口地址不一样,需要在项目打包的时候手动切换不同的地址,有时候忘记切换就要重新打包, ...
- vue cli脚手架项目利用webpack给生产环境和发布环境配置不同的接口地址或者不同的变量值。
废话不多说,直接进入正题,此文以配置不同的接口域名地址为例子 项目根目录下有一个config文件夹,基础项目的话里面至少包括三个文件, 1.dev.env.js 2.index.js 3.prod.e ...
- vue项目接口地址的定义
对于接口地址域名我们经常会遇到,那么如何去定义呢: 只要在config/dev.env.js中定义变量NODE_ENV就行啦 在.vue文件中的引用方式如下: 嗯,就是这样简单~~~~
- vue wabpack 切换开发环境 和生成环境 的接口地址
/config/dev.env.js 新增一行 var merge = require('webpack-merge') var prodEnv = require('./prod.env') mod ...
- webpack正式、测试环境接口地址本地运行及打包命令配置
声明:本文由w3h5原创,转载请注明出处:<webpack正式.测试环境接口地址本地运行及打包命令配置> https://www.w3h5.com/post/521.html 为了方便开发 ...
- vue webpack打包之后 重新修改配置文件接口API路径,无需修改代码后再打包
用vue-cli构建的项目通常是采用前后端分离的开发模式,也就是前端与后台完全分离,此时就需要将后台接口地址打包进项目中,但是有的时候需要修改接口地址,为了避免为了修改接口地址而进行修改代码后再重新打 ...
- vue config.js配置生产环境和发布环境不同的接口地址问题
第一步,分别设置不同的接口地址 首先,我们分别找到下面的文件: /config/dev.env.js /config/prod.env.js 其实,这两个文件就是针对生产环境和发布环境设置不同参数的文 ...
随机推荐
- 【U8】 生产订单下bom 提示 “遇到以0做除数错误”错误
一个虚拟件子件的子件为无换算率存货,bom中对应的换算率.辅助基本用量为0,修改为null后正常. 对应 bom_opcomponent表的 ChangeRate 换算率 AuxBaseQtyN 辅助 ...
- Jenkins 项目构建平台
引言 Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具,主要用于持续.自动的构建/测试软件项目.监控外部任务的运行.Jenkins 用 Java 语言编写,可在 Tomcat 等流行 ...
- Django——自定义前端上传文件
from django.db import models class Mytb(models.Model): file = models.FileField(upload_to='uploads/') ...
- golang 后台 苹果一键登录 sing in with apple
本文主要展示golang后台编写苹果一键登录的代码.苹果一键登录的流程需自行去查看相关文档 这是解析 identity_token的方法来验证 如果是用code的话验证 请去 https://b ...
- Pod安全策略:PodSecurityPolicy(PSP)
目录 一.系统环境 二.前言 三.PodSecurityPolicy 简介 四.为什么需要 PodSecurityPolicy 五.给客户端授权 六.启用PodSecurityPolicy(PSP) ...
- redhat8 添加scsi类型的硬盘后开机重配虚拟机 且黑屏
原因:因为vmware磁盘优先级里nvme类型的磁盘比scsi类型的磁盘优先级高,所以开机先启动scsi类型的磁盘 又因为scsi并不是系统盘所以不能够实现开机 解决方法: 改变vmware的磁盘优先 ...
- 机器学习策略篇:详解如何改善你的模型的表现(Improving your model performance)
如何改善模型的表现 学过正交化,如何设立开发集和测试集,用人类水平错误率来估计贝叶斯错误率以及如何估计可避免偏差和方差.现在把它们全部组合起来写成一套指导方针,如何提高学习算法性能的指导方针. 所以想 ...
- 解决Python使用GPU
在Python中使用GPU进行计算通常涉及到一些特定的库,如NumPy.SciPy的GPU加速版本(如CuPy.PyCUDA等)或深度学习库(如TensorFlow.PyTorch等).这些库能够利用 ...
- ABC317题解报告
我直接从第三题开始讲了. T3 把数组 \(A\) 从大到小排序. 然后从前往后把前 \(q\) 个数加起来,然后判断这 \(q\) 个数的和与 \(d\) 的大小关系,如果大了就变成 \(d\). ...
- mybatis insert foreach批量添加
mybatis insert foreach批量添加 int insertSelectiveBatch(List<ImageDetailEntity> myList); //写法1 < ...