场景:在公司开发时用的是后台搭建的服务器,但是拿到外面部署时用的是真实服务器,不想每次改一次ip就打包一次,而且去部署时也不一定提前知道对方的ip…无法现场打包

首先我们配置开发环境与生产环境接口地址,
congif > dev.env.js:开发环境
congif > prod.env.js:正式(生产)环境

这里的window.g.ApiUrl后面再讲,这里可以写成真实服务器ip
'use strict'
module.exports = {
  NODE_ENV: '"production"',
  //生产环境的url
  API_ROOT: 'window.g.ApiUrl'
}

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  //开发环境的url
  API_ROOT: '"http://192.168.2.32:8081/data-store"'
})

然后在用到这两个地址的时候使用 process.env.API_ROOT,
我这里是把地址存在vuex里面
在这里插入图片描述
这样一来,webpack就会自动区分环境,npm run dev时用开发地址,npm run build时用线上地址

再说一下打包之后怎么修改配置,在任何地方部署都不需要重新打包
第一步:在项目的static文件夹下新建config.js,内容如下
目的是把地址存到window全局下

window.g = {
    AXIOS_TIMEOUT: 10000,
    ApiUrl: "http://192.168.2.32:8081/data-store", // 配置服务器地址,
    ParentPage: {
        CrossDomainProxyUrl: '/Home/CrossDomainProxy',
        BtnsApi: '/api/services/app/Authorization/GetBtns',
        OrgsApi: '/api/services/app/authorization/GetOrgsByUserId'
    }
}

第二步:在index.html里面引入这个config.js
注意路径

<script type="text/javascript" src="./static/config.js"></script>

第三步:在任意处使用 window.g.ApiUrl 调用接口
我这里是在生产环境的ip配置里调用的

'use strict'
module.exports = {
  NODE_ENV: '"production"',
  //生产环境的url
  API_ROOT: 'window.g.ApiUrl'
}

此方法能有效解决打包,接口配置等问题,亲测有效,不会把config.js也打包进去
另外网上还有一种办法使用generate-asset-webpack-plugin
https://www.jianshu.com/p/377bfd2d9034
https://blog.csdn.net/qq_41409679/article/details/84878642
尝试之后会有报错,可能是我操作不当

Logo

前往低代码交流专区

更多推荐