问题描述:

前端需要修改restful API的url,但是打包之后,配置文件找不到了,如果在npm run build 生成dist后,这个配置也被写死了,传到运行的前端服务器上后,假设某次,api服务器的ip修改了,改动只是更新下这个url,但是却需要会到前端源码,url后,在重新npm run build,然后再把整个dist再重新传到前端服务器,才可以。

解决方法:

用了generate-asset-webpack-plugin 这个插件,在webpack.prod.conf.js中去生成configServer.json文件,让其在build的时候生成json文件,然后再使用axios异步获取json,替换url即可

具体做法:

1.先安装generate-asset-webpack-plugin插件

npm install --save-dev generate-asset-webpack-plugin

2.在webpack.prod.conf.js里面配置

//让打包的时候输出可配置的文件
const GenerateAssetPlugin = require('generate-asset-webpack-plugin')
const createServerConfig = function(compilation) {
  let serverConfig={baseUrl:'http://192.168.1.1:8080/'};
  return JSON.stringify(serverConfig);
};
//让打包的时候输入可配置的文件
plugins: [
    new GenerateAssetPlugin({
      filename: 'serverconfig.json',
      fn: (compilation, cb) => {
          cb(null, createServerConfig(compilation));
      },
      extraFiles: []
  }),

打包之后,在根目录就会生成serverconfig.json文件

3.使用

http.js文件(这是我项目的配置文件,里面包含axios请求拦截等)

import axios from 'axios';
axios.defaults.timeout = 300000;
if (process.env.NODE_ENV == 'development') {
    axios.defaults.baseURL = 'http://192.168.1.1:8080/'
}else if(process.env.NODE_ENV == 'production'){
    axios.get('serverconfig.json').then(res=>{
        if(res.data.baseUrl){
            axios.defaults.baseURL = res.data.baseUrl
        }else{
            axios.defaults.baseURL = 'http://192.168.1.1:8080/'
        }
    })
}

 

axios.defaults.baseURL是什么? 

 

如若没理解,请参考

https://www.webpackjs.com/concepts/    webpack网址

https://www.kancloud.cn/yunye/axios/234845   axios网址

 

 

Logo

前往低代码交流专区

更多推荐