webpack配置文件外置的两种实现方式

 更新时间:2023年12月13日 16:12:47   作者:yazhiShaw  
webpack配置环境变量文件,是根据打包命令寻找对应的环境变量文件,从而获取接口地址,本文就来介绍一下webpack配置文件外置的两种实现方式,感兴趣的可以了解一下

前言

众所周知,webpack配置环境变量文件,是根据打包命令寻找对应的环境变量文件,从而获取接口地址。所以触发时机是在每次打包的时候,接口地址才会被打包进去,无法自由修改。
本次要求一次打包后,修改接口地址的文件,刷新页面可达到更新接口地址。

有两种方法,一是安装generate-asset-webpack-plugin插件,二是把接口地址暴露在window成为全局变量

方法(一) 安装generate-asset-webpack-plugin插件

首先安装插件

npm install generate-asset-webpack-plugin -S -D

在build文件夹下,新建一个文件generate-asset.config.js

const GenerateAssetPlugin = require('generate-asset-webpack-plugin');
const config = require('../config/app.config');

function createServerConfig(compilation) {
    return JSON.stringify(
        Object.assign({
            _hash: compilation.hash,
        },config)
    )
}
//生成app-config.json文件
module.exports = () => {
    return new GenerateAssetPlugin({
        filename: 'config/app-config.json',
        fn: (compilation, cb) => {
            cb(null, createServerConfig(compilation));
        }
    })
}

在config文件夹下,创建app.conifg.js

module.exports = {
  env: 'prod',
  baseUrl: "http://xxx.com"
}

这里就是常用的配置文件,在开发环境下,可以直接引入使用变量。
在正式环境下,还需要在webpack.base.conf.js文件夹下配置下。先引入:

const packageConfig = require('../package.json')
const generateAssetAppConfig = require('./generate-asset.config')

再加入plugins的配置

module.exports = {
  context: path.resolve(__dirname, '../'),
  entry: {
    app: './src/main.js'
  },
  output: {
    path: config.build.assetsRoot,
    filename: '[name].js',
    publicPath: process.env.NODE_ENV === 'production'
      ? config.build.assetsPublicPath
      : config.dev.assetsPublicPath
  },
  plugins: [
    generateAssetAppConfig(packageConfig)
  ],

在axios请求封装文件,抽离封装了一个https.js的配置文件
开发环境直接根据路径获取变量,正式环境从请求app-config.json获得

import * as g from '../config/app.config'
import $ from 'jquery'

if (process.env.NODE_ENV === 'production') {//打包正式环境使用app-config.json
    $.ajax({
        url: 'config/app-config.json',
        async: false,
        type: 'get',
        dataType: "json",
        success: function (rs) {
            if (rs.baseUrl) {
                axios.defaults.baseURL = rs.baseUrl;
            }
        }
    });
} else {//开发环境就直接使用app.config.js
    axios.defaults.baseURL = g.baseUrl;   //配置接口地址
}

以上
使用npm run dev,就直接用本机的config/app.config.js文件
使用npm run build 就用在服务器上的dist/config/app-config.json文件

方法(二) 暴露在window成为全局变量

在config目录下创建app.config.js

let baseURL = "http://xxx.com";

window.httpConfig = {
  baseURL,
};

打包正式环境时,把app.config.js拷贝到static目录下
build/webpack.prod.conf.js修改如下:

	new CopyWebpackPlugin([
      {
        from: "./config/app.config.js",
        to: 'static',
      },
    ]),

然后在index.html中引入

 <script src="/static/app.config.js"></script>

在axios的配置文件中,配置接口地址

import * as g from '../config/app.config'

// 如果是正式环境打包,去配置文件获取,如果是开发环境,去获取本机的app.config文件
axios.defaults.baseURL =
  process.env.NODE_ENV === "production"
    ? window.httpConfig.baseURL
    : g.baseURL;

 到此这篇关于webpack配置文件外置的两种实现方式的文章就介绍到这了,更多相关webpack配置文件外置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js LZ77算法的实现代码

    js LZ77算法的实现代码

    JS操作二进制很麻烦,而且一直没有一个好的无损压缩工具来实现纯文本的压缩。
    2010-04-04
  • js浮动图片的动态效果

    js浮动图片的动态效果

    这篇文章介绍了几种JS的动态效果实例,有需要的朋友可以参考一下
    2013-07-07
  • js当前页面登录注册框,固定div,底层阴影的实例代码

    js当前页面登录注册框,固定div,底层阴影的实例代码

    下面小编就为大家带来一篇js当前页面登录注册框,固定div,底层阴影的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • codemirror6实现自定义代码提示效果实例

    codemirror6实现自定义代码提示效果实例

    这篇文章主要给大家介绍了关于codemirror6实现自定义代码提示效果的相关资料,CodeMirror是一个网络代码编辑器组件,它可以在网站中用于实现支持多种编辑功能的文本输入字段,并具有丰富的编程接口以允许进一步扩展,需要的朋友可以参考下
    2023-08-08
  • JS异步函数队列功能实例分析

    JS异步函数队列功能实例分析

    这篇文章主要介绍了JS异步函数队列功能,结合实例形式分析了异步函数队列的应用场景、实现方法与相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • js+CSS实现弹出居中背景半透明div层的方法

    js+CSS实现弹出居中背景半透明div层的方法

    这篇文章主要介绍了js+CSS实现弹出居中背景半透明div层的方法,涉及javascript操作弹出div层的操作技巧,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • js判断IE6/IE7/FF的代码[XMLHttpRequest]

    js判断IE6/IE7/FF的代码[XMLHttpRequest]

    js下通过XMLHttpRequest判断IE6/IE7/FF的代码,需要的朋友可以参考下。
    2011-02-02
  • 一个加载js文件的小脚本

    一个加载js文件的小脚本

    一个加载js文件的小脚本...
    2007-06-06
  • Js利用正则表达式去除字符串的中括号

    Js利用正则表达式去除字符串的中括号

    这篇文章主要给大家介绍了关于Js利用正则表达式去除字符串的中括号的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • js实现图片上传并预览功能

    js实现图片上传并预览功能

    这篇文章主要为大家详细介绍了js实现图片上传并预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论