前言
有時候我們負責做的只是一個大平臺系統下的某個子系統,有時候我們需要調用這個大平臺系統下別的子系統的接口。
如果直接把別的接口地址,直接寫在代碼里,那么如果別的子系統的接口調整了,會影響到我們的系統,我們還要重新打包,部署,會很繁瑣。
解決思路
我們的想法是這樣:
- 敲代碼的時候,如果要
引用其他人或者第三方的接口,可以弄成一個配置文件 - 這個
配置文件,在我們的vue項目打包之后,也是獨立存在的,而不是和整個vue項目一起被打成一個團子了。 這樣里面的配置要改什么的,就可以直接讓運維人員直接改,只要不涉及需求的更改,功能的新增,修改,我們就可以解放了
解決過程
-
新建/打開 一個
vue項目 -
打開
public文件夾
我這個新建的vue項目里面沒有static文件夾,那我新建一個,并在這個static文件夾里新建一個config.js文件
config.js中的內容如下:
js
復制代碼
// 要引用的 其他人 或者 第三方 的接口
window.server = {
fileUploadUrl: "ip地址", // 開發環境接口地址
// fileUploadUrl: "ip地址", // 測試環境接口地址
// fileUploadUrl: "ip地址", // 正式環境接口地址
}
- 在
index.html中引入剛剛創建的config.js
- 引入
config.js之后,在具體需要的模塊中進行調用
js
復制代碼
// 調用引入的地址
console.log(window.server.fileUploadUrl);
5. 效果
補充:統一管理本項目配置的接口
- 像我們如果要跳轉到別的頁面,那么用上面的這種方式
- 但是我們做項目,
前端后分離,當前項目配置的接口要用,我們一般這般操作
src/libs/index.js 中的內容:
js
復制代碼
const configAPI = {
// xx模塊1---接口1
module_1_xxx1: '/LocalDemoApi/moduleApi/module_1/xxx.json', // 后端接口還沒給出來之前,你也可以自己弄點json數據,模擬一下調接口的情況
// xx模塊1---接口2
module_1_xxx2: '/api/moduleApi/module_1/xxxx', // 實際調用接口
// xx模塊2---接口1
module_2_xxx1: '/api//moduleApi/module_2/xxxx', // 實際調用接口
// ...
};
export default configAPI;
// 此處的接口 開頭的 LocalDemoApi, api 都是vue.config.js中 devServer下的 proxy 中配置的
然后 main.js中引入 代碼如下:
js
復制代碼
import configAPI from './libs/apis/index';
// 接口統一管理
Vue.prototype.$configAPI = configAPI;
然后是配置到vue項目中,
vue.config.js文件如下:
js
復制代碼
const path = require("path");
const webpack = require('webpack');
function resolve(dir) {
return path.join(__dirname, dir);
}
module.exports = {
// 打包后運行環境目錄
publicPath: process.env.NODE_ENV === "production" ? "/xxxProject/" : "/",
lintOnSave: true, // eslint-loader 是否在保存的時候檢查
productionSourceMap: false, // 生產環境是否生成 sourceMap 文件
filenameHashing: true, // 文件hash
devServer: {
// port: 3306,
open: true,
proxy: {
"/api": {
// target: "http://192.168.xxx.xxx:xxxx/", //開發地質
// target: "http://192.168.xx.xx:xxxx/", // 測試地址
target: "http://xxx.xxx.xxx.x:xxxx/", // 正式服務器地址
ws: true,
changeOrigin: true,
pathRewrite: {
}
},
// 這里就是訪問本地的模擬json數據了
"/LocalDemoApi": {
target: "http://localhost:8080", // 路徑指向本地主機地址及端口號
ws: true,
changeOrigin: true,
pathRewrite: {
"^/LocalDemoApi": "/DemoData" // 路徑轉發代理
}
},
}
},
chainWebpack: config => {
// 配置import 和 require 等路徑別名,webpack中是通過 resolve.alias 來實現此功能的,通過set方法添加修改想要的alias 配置
config.resolve.alias
.set("@", resolve("src"))
.set("assets", resolve("src/assets"))
.set("components", resolve("src/components"));
},
};
重啟下項目即可
DemoData 這個存放模擬json數據的目錄 就是public中的DemoData文件夾(這個文件夾是我自己創建的,大家也可以取別的名字,只要這個名字你改變了, 那么 vue.config.js中的DemoData 也要改成相應的名字)
最后,你打包了,打包默認生成的文件夾是dist文件夾
所以,這個包要部署到服務器上生效,需要把這個 dist文件夾,改名為vue.config.js 中配置的 xxxProject 名字才能生效。