前端开发,不同代码分支代理到不同接口
创始人
2025-05-28 20:14:32
0

react项目中,webpack.config.js配置了/drapi的proxy,我有一个需求,在不同代码分支代理到不同的api,具体需求是master分支代理到http://a.com,dev分支代理到http://b.com,可以帮我实现吗

是的,您可以通过在webpack.config.js文件中使用条件语句来实现在不同的代码分支代理到不同的API。

在webpack.config.js中,您可以使用Node.js的process.env来访问环境变量。您可以在启动项目时设置不同的环境变量来标识当前所在的分支。然后,您可以使用这个环境变量来决定代理到哪个API。

以下是一个示例webpack.config.js文件,可以根据分支名称代理到不同的API:

javascript
Copy code
const path = require(‘path’);
const webpack = require(‘webpack’);
const HtmlWebpackPlugin = require(‘html-webpack-plugin’);

// 获取环境变量
const env = process.env.NODE_ENV || ‘development’;
const branch = process.env.BRANCH || ‘master’;

// 判断当前分支,并根据不同分支代理到不同API
let proxyTarget = ‘’;
if (branch === ‘dev’) {
proxyTarget = ‘http://b.com’;
} else {
proxyTarget = ‘http://a.com’;
}

module.exports = {
mode: env,
entry: ‘./src/index.js’,
output: {
path: path.resolve(__dirname, ‘dist’),
filename: ‘bundle.js’,
},
devServer: {
contentBase: ‘./dist’,
proxy: {
‘/drapi’: {
target: proxyTarget,
pathRewrite: {‘^/drapi’: ‘’}
}
}
},
plugins: [
new HtmlWebpackPlugin({
template: ‘./src/index.html’
}),
new webpack.DefinePlugin({
‘process.env.BRANCH’: JSON.stringify(branch)
})
]
};

在上面的代码中,我们使用process.env.BRANCH来获取当前分支名称,并将其传递给webpack.DefinePlugin,以便在应用程序中使用它。我们还使用process.env.BRANCH在devServer中设置不同的代理目标。如果分支名称为’dev’,则代理目标为’http://b.com’,否则为’http://a.com’。

然后,在启动项目时,您可以通过设置环境变量来指定当前分支名称。例如,在Linux或Mac上,您可以使用以下命令来启动代理到’dev’分支API的应用程序:

bash
Copy code
BRANCH=dev npm start

或者,您可以将其添加到您的package.json文件中:

json
Copy code
“scripts”: {
“start:dev”: “BRANCH=dev npm start”,
“start:master”: “BRANCH=master npm start”
},

然后,您可以使用以下命令来启动不同分支代理到不同API的应用程序:

bash
Copy code
npm run start:dev # 代理到 http://b.com
npm run start:master # 代理到 http://a.com

“scripts”: {
“start”: “node scripts/start.js”,
“build”: “node scripts/build.js”,
“test”: “node scripts/test.js”
},这是package.json的script部分,如何改造呢

您可以在package.json的scripts中添加两个脚本命令,分别用于启动不同分支代理到不同API的应用程序。

例如,您可以添加以下两个脚本命令:

json
Copy code
“scripts”: {
“start:dev”: “cross-env BRANCH=dev node scripts/start.js”,
“start:master”: “cross-env BRANCH=master node scripts/start.js”,
“build”: “node scripts/build.js”,
“test”: “node scripts/test.js”
},

这里使用了cross-env来跨平台地设置环境变量。然后,start:dev脚本将BRANCH环境变量设置为dev,start:master脚本将BRANCH环境变量设置为master。这样,在启动应用程序时,Webpack将根据BRANCH环境变量的值代理到不同的API。

现在,您可以使用以下命令来启动不同分支代理到不同API的应用程序:

bash
Copy code
npm run start:dev # 代理到 http://b.com
npm run start:master # 代理到 http://a.com

当您执行这些命令时,Webpack将根据您的环境变量的值,代理到不同的API。

‘BRANCH’ 不是内部或外部命令,也不是可运行的程序

如果您在使用cross-env时遇到了’BRANCH’ 不是内部或外部命令,也不是可运行的程序的错误,这可能是因为您没有全局安装cross-env。可以通过以下命令全局安装cross-env:

bash
Copy code
npm install -g cross-env

或者您也可以在项目目录中局部安装cross-env,并将其添加到您的package.json文件的devDependencies中:

bash
Copy code
npm install cross-env --save-dev

接下来,您需要更新package.json文件的scripts部分,以便正确使用cross-env。例如,您可以按照前面的回答所示,添加以下两个脚本命令:

json
Copy code
“scripts”: {
“start:dev”: “cross-env BRANCH=dev node scripts/start.js”,
“start:master”: “cross-env BRANCH=master node scripts/start.js”,
“build”: “node scripts/build.js”,
“test”: “node scripts/test.js”
},

现在,您可以使用npm run start:dev和npm run start:master来启动不同分支代理到不同API的应用程序,cross-env将正确设置BRANCH环境变量并将其传递给Webpack。

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...