问题描述:
前端工程里,比较常见的会遇到,比如编译的时候,需要分Release和Dev环境编译,手工的话,以CRA
为例子,可以在项目根目录里定义.env
文件,在run build
之前手动改.env文件内容
/* .env */
REACT_APP_ENV=DEV
REACT_APP_LANGUAGE=en
REACT_APP_ROUTE_NAME=edu_loan
在项目里读取可以是:
const env = process.env.REACT_APP_ENV;
console.log("env", env); // DEV
但是遇到jenkins自动化部署,就不能这么来了,不然每次都要重新git push一下.env的变化,会很麻烦,怎么解决呢?
解决:
目光来到package.json
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
}
Jenkins脚本,走的也是yarn run build
,那么新定义一个命令,命令传参,覆盖.env
的值即可
在mac+linux下,
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"build:release": "REACT_APP_ENV=RELEASE react-app-rewired build",
}
而在win下
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"win-build:release": "set REACT_APP_ENV=RELEASE&& react-app-rewired build",
}
考虑团队开发者有可能用mac也可能用win,那么定义命令最终如下:
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"build:release": "REACT_APP_ENV=RELEASE react-app-rewired build",
"win-build:release": "set REACT_APP_ENV=RELEASE&& react-app-rewired build",
}
在win下手动打release包,用yarn run win-build:release
命令,mac和linux下用yarn run build:release
,而jenkins一般部署在服务器上,则一般使用yarn run build:release
来进行生产部署,而视要部署环境,部署脚本可以分别让Jenkins执行不同的命令,Perfect