webpack 代理配置 开发环境以及生产环境配置

本文详细介绍了如何在Webpack中设置代理,以解决开发过程中的跨域问题,并讲解了开发环境与生产环境的接口配置方法,包括如何使用webpack-merge模块进行环境变量的区分设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用webpack的时候踩了很多的坑,查询了很多复制的文章,毫无营养没有帮助,在此做一些自己的理解和整理,希望对碰到和我一样情况的人有所帮助

先讲一下代理是怎么设置的

在webpack的文件夹config/index.js中,找到dev

通过proxyTable来设置代理,以下为代码和注解

proxyTable: {
    '/apis/*': {    // 设置请求前增加的值,这个值会代替我们的网址进行请求
    // target: 'http://192.168.89.88:8986',    // 有多个后端的时候,注释可以方便切换
    target: 'http://192.168.89.88:7278',    // 这个就是我们设置的代理服务器地址
    changeOrigin: true,                    // 这个值就是用来跨域的,默认为false
    pathRewrite: {'^/apis': 'apis'}        // 实现替换的,将apis替换成apis,也可以设置为空
    }
}

假设我们的请求为 /apis/login
以上代码会将我们的请求替换成                    http://192.168.89.88:7278/apis/login    
如果pathRewrite为{'^/apis': ''}结果就是        http://192.168.89.88:7278/login 

但是如果我们在网页中调试的时候实际上会发现地址是本地服务器地址加请求,如下
我们的本地服务器为 localhost:8080              http://localhost:8080/apis/login

实际上不会有影响,我们还是以http://192.168.89.88:7278来进行代理请求的,只是字面还是我们的本地服务器

 

以上代理结束,接下来介绍一下怎么配置开发环境和生产环境,目前本人只知道在不跨域的情况下怎么使用,如果需要生产环境跨域的,以下信息对你的需要是无效的

首先我们需要配置生产环境和开发环境使用的接口

config/dev.env.js(这里是主要的,配置开发环境的接口,以及生产环境接口所在的地址)

'use strict'    // 默认生成的
var merge = require('webpack-merge')    // 需要引入webpack-merge来帮助我们,一般安装都会自带
var prodEnv = require('./prod.env')     // 指明生产环境接口所在的地址位置

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  BASE_API: '"//192.168.89.88:7278"',    // 这里就是配置我们开发接口的地方
})

config/prod.env.js(这里配置生产地址)

'use strict'    // 默认生成的
module.exports = {
  NODE_ENV: '"production"',
  BASE_API: '"//192.168.89.88:8986"'    // 配置生产地址
}

main.js(给axios设置生产和开发地址)

import Vue from 'vue'
import axios from 'axios'

Vue.prototype.$axios = axios

axios.defaults.baseURL = process.env.BASE_API    // 需要使用代理就把他注释掉,切换很方便


// 设置完之后,就可以使用npm run dev    执行开发环境(不跨域,跨域请使用代理)
//                     npm run build  打包生产环境

如果在打包好上传后,网页不显示,或者报404,在检查中可以看到自己的网页标签,一般是定位的问题,解决办法如下

config/index.js中的build中

assetsPublicPath: './'    

// 在斜杠前加一个点,使它变成相对定位就可以了。

以上总结完毕

<think>好的,我现在需要帮助用户解决如何通过Webpack配置实现开发和生产环境的自动切换。用户之前提到他们在使用Vue插件时遇到了控制台没有对应Tab页的问题,可能已经尝试过一些配置,但没有成功。现在用户想了解如何正确配置Webpack环境切换,这可能与他们之前的问题有关联,比如环境变量设置不正确导致Vue Devtools未启用。首先,我需要参考用户提供的引用内容。引用[1]提到使用cross-env来设置环境变量,引用[2]和[3]详细说明了Webpack配置,包括mode、devServer的设置,以及如何在package.json中区分开发和生产环境的脚本命令。引用[5]则涉及代理配置,可能与环境切换关系不大,但需要留意。接下来,我需要整合这些信息,明确Webpack如何根据环境自动切换配置。关键点包括: 1. **环境变量设置**:使用cross-env在package.json的脚本中设置NODE_ENV,如引用[1]和[3]所示,通过cross-env传递环境变量。2.**Webpack配置文件的适应性**:根据process.env.NODE_ENV的值,动态调整mode、devtool、插件等配置。例如,开发环境启用source map,生产环境进行代码压缩。3.**区分开发和生产配置**:可能需要拆分webpack.config.js为webpack.dev.js和webpack.prod.js,或者使用函数导出配置,根据环境变量返回不同配置。 4. **插件启用条件**:某些插件如HotModuleReplacementPlugin仅在开发环境使用,而CleanWebpackPlugin可能用于生产环境。引用[3]中提到的devServer配置也只在开发时使用。需要确保用户理解如何在Webpack中访问环境变量,并通过条件判断来调整配置。同时,要提到如何通过命令行参数指定配置文件,或者在单一配置文件中处理环境差异。另外,用户之前的问题涉及VueDevtools未显示,可能与NODE_ENV未正确设置为development有关。因此,在解答环境切换时,需要强调正确设置环境变量对Vue插件的影响,确保开发模式下Devtools被启用。最后,成相关问题,引导用户进一步了解环境配置的优化、Vue Devtools的调试方法等。需要确保引用正确,比如引用[1]、[2]、[3]关于Webpack配置的部分,以及引用[4]可能涉及的Vue项目结构问题。</think>### 通过Webpack实现开发/生产环境自动切换的配置方案 --- #### 一、核心配置原理 通过`process.env.NODE_ENV`环境变量实现智能切换,需结合以下配置要素: 1. **环境变量注入** 使用`cross-env`统一跨平台环境变量设置(引用[1]): ```json // package.json "scripts": { "dev": "cross-env NODE_ENV=development webpack-dev-server", "build": "cross-env NODE_ENV=production webpack" } ``` 2. **Webpack模式自动切换** 在`webpack.config.js`中动态读取环境变量(引用[2]): ```javascript const isProd = process.env.NODE_ENV === 'production' module.exports = { mode: isProd ? 'production' : 'development', devtool: isProd ? false : 'eval-cheap-module-source-map' } ``` --- #### 二、完整配置示例 ```javascript // webpack.config.js const { DefinePlugin } = require('webpack') const isProd = process.env.NODE_ENV === 'production' module.exports = { mode: isProd ? 'production' : 'development', // 开发环境专属配置 devServer: isProd ? undefined : { hot: true, open: true, port: 3000, proxy: { /* 引用[5]中的代理配置 */ } }, plugins: [ new DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }), ...(isProd ? [new CleanWebpackPlugin()] // 生产环境插件 : [new VueLoaderPlugin()]) // 开发环境插件 ] } ``` --- #### 三、关键差异点配置对比 | 配置项 | 开发环境 | 生产环境 | |---------------|-----------------------------------|-----------------------------------| | **mode** | `development` | `production` | | **devtool** | `eval-cheap-module-source-map` | `false` (关闭source map) | | **devServer** | 启用热更新、代理等(引用[3]) | 不配置 | | **压缩** | 不启用代码压缩 | 自动启用Terser压缩 | | **Vue插件** | 开启devtools(引用[4]) | 关闭调试工具 | --- #### 四、环境敏感型功能实现 1. **动态加载Vue插件** ```javascript if (process.env.NODE_ENV === 'development') { Vue.use(DevtoolsPlugin) } ``` 2. **API地址自动切换** ```javascript axios.defaults.baseURL = isProd ? 'https://api.prod.com' : 'http://localhost:3000' ``` 3. **样式表差异化处理** ```javascript { test: /\.css$/, use: [ isProd ? MiniCssExtractPlugin.loader : 'style-loader', 'css-loader' ] } ``` --- ### 配置验证方法 ```javascript // 在入口文件打印环境变量 console.log('当前环境:', process.env.NODE_ENV) // 应显示development或production ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值