create-react-app build之后想自定义生成一个可配置的文件,怎么实现

#1

因为不想每次换其他服务器地址就要重新build一次项目,现在想在项目部署的时候通过生成一个可配置的文件来修改接口地址,现在大部分是没有这种需求的,而且也找不到资源,这里面有没有大神可以告诉下怎么做。

#2

参数通过环境变量来配置

程序里面读取环境变量的方式就是

const mysql_url = process.env.MYSQL_URL;

配置环境变量的方式

docker打包的时候顺便配置

.profile, .bashrc 等配置文件中配置

坏处是有可能和其他进程有环境变量上的冲突

pm2 等服务端进程管理器

配置方式看pm2说明书, 一般写一个pm2.config.json 来启动, 根据项目不同会写出一大堆
比如 pm2.prod.json, pm2.dev.json pm2.beta.json 等等, 我现在用的就是这个

通过启动脚本

这个得看你用的是什么操作系统了, 把你的进程写到服务里面, 开机自动启动,挂掉了也能自动重启。
我用的是centos, 里面的 systemctl 能直接配置程序的环境变量

通过启动文件

写一个启动文件, 配置一下脚本 同样可以写一坨的 start.sh, dev.sh, server1.sh, server2.sh

#!/usr/bin/env bash
export MYSQL_URL="mysql://xxxxxxxxx";
export SERVER_URL="https://xxxxxx"
node /path/to/index.js

还有一种猥琐的方式是区分入口文件

server1.js

process.env.MYSQL_URL = "mysql://localhost/db1";
require("./app")

server2.js

process.env.MYSQL_URL = "mysql://192.168.0.1/db1"
require("./app")
1 Like
#3

感谢回复,现在需求是项目已经打包完成了,生成了相应的dist目录,然后通过修改自己定义的一个配置文件来修改,主要是这个是由运维人员来操作的,他不需要去关注代码,只需要修改文件就好,就类似后端的web.config文件一样

#4

你可以这样,使用.env配置环境变量,让运维人员自己去构建项目,你只负责提交到版本库,运维人员可以修改环境变量来构建项目。

#5

好的,我会考虑您给的建议,感谢回复