如何做到webpack打包vue项目后,可以修改配置文件
问题描述:前端需要修改restful API的url,但是打包之后,配置文件找不到了,如果在npm run build 生成dist后,这个配置也被写死了,传到运行的前端服务器上后,假设某次,api服务器的ip修改了,改动只是更新下这个url,但是却需要会到前端源码,url后,在重新npm run build,然后再把整个dist再重新传到前端服务器,才可以。解决方法:用了genera...
问题描述:
前端需要修改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网址
更多推荐
所有评论(0)