問題描述:
前端工程里,比較常見的會(huì)遇到,比如編譯的時(shí)候,需要分Release和Dev環(huán)境編譯,手工的話,以CRA為例子,可以在項(xiàng)目根目錄里定義.env文件,在run build之前手動(dòng)改.env文件內(nèi)容
/* .env */
REACT_APP_ENV=DEV
REACT_APP_LANGUAGE=en
REACT_APP_ROUTE_NAME=edu_loan
在項(xiàng)目里讀取可以是:
const env = process.env.REACT_APP_ENV;
console.log("env", env); // DEV
但是遇到j(luò)enkins自動(dòng)化部署,就不能這么來了,不然每次都要重新git push一下.env的變化,會(huì)很麻煩,怎么解決呢?
解決:
目光來到package.json
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
}
Jenkins腳本,走的也是yarn run build,那么新定義一個(gè)命令,命令傳參,覆蓋.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",
}
考慮團(tuán)隊(duì)開發(fā)者有可能用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下手動(dòng)打release包,用yarn run win-build:release命令,mac和linux下用yarn run build:release,而jenkins一般部署在服務(wù)器上,則一般使用yarn run build:release來進(jìn)行生產(chǎn)部署,而視要部署環(huán)境,部署腳本可以分別讓Jenkins執(zhí)行不同的命令,Perfect