文章大綱
常常我們會把「前端本身跑專案的方式的環境」跟「開發流程的環境」搞混,都是叫做環境,但是我當初也是搞了很久才弄懂(汗
前端的專案環境通常由 webpack 區分成:
- development:在本地跑起
node serve
專案,為方便開發而使用的方式。 - production:webpack打包後產生的靜態檔案,會排除沒用到的依賴,部署要用的就是這種打包檔,一般會放在
/dist
裡。
開發流程環境通常會區分以下幾種:
- development:工程師自己再開發的時候使用的環境。
- sit:如果公司有QA團隊,這個環境會給QA測試。
- uat:通過QA測試之後,會放到uat環境給客戶測試(到這邊都還只是測試)
- production:正式環境,就是一般使用者會看到的釋出版本。
後端也會這樣區分,所以會關乎到你
api
路徑的設定。
package.json
原本我們起專案的指令,會有dev
(或是serve
)和build
{
"scripts": {
"dev": "webpack-dev-server --config ./build/webpack.config.js",
"build": "webpack --config ./build/webpack.config.js",
"start": "PORT=8080 serve -s dist",
},
}
這時候我們development
環境和production
環境要加上參數去區分,假設我們先分成sit
和production
環境就好。
修改指令如下:
{
"scripts": {
"dev": "webpack-dev-server --env.api=SIT --config ./build/webpack.config.js",
"dev:prod": "webpack-dev-server --config ./build/webpack.config.js",
"build": "webpack --env.api=SIT --config ./build/webpack.config.js",
"build:prod": "webpack --config ./build/webpack.config.js",
"start": "PORT=8080 serve -s dist",
},
}
可以看到我先增了兩個指令:dev:prod
、build:prod
然後在原本的dev
指令和build
指令都加上一個api
的參數,他們的值都是字串的"SIT"
也就是說我可以在dev
環境跑sit
或是production
的api
,build環境也同理。
所以整理一下目前排列組合有四種環境:
- 本地端起
sit
環境:yarn dev
- 本地端起
production
環境:yarn dev:prod
- 打包
sit
環境:yarn build
- 打包
production
環境:yarn build:prod
webpack.config.js
通常我們會在 webpack 裡面設定一些環境變數:
module.exports = env => {
let config = [];
config.push(
new webpack.EnvironmentPlugin({
API_URL: "your-api-domain.com"
}),
);
return config;
}
但這樣 api 路徑是寫死的,我們需要依照環境來打不同的api。
還記得我們剛剛在指令那邊有加上一個參數叫做api
,他的值是字串的"SIT"
所以修改程式如下:
module.exports = env => {
let config = [];
config.push(
new webpack.EnvironmentPlugin({
API_URL: env?.api === "SIT"
? "your-sit-api-domain.com"
: "your-production-api-domain.com"
}),
);
return config;
}
最後yarn dev
測試一下是不是打到your-sit-api-domain.com
這個位置的 api ~
備註一下,如果是 vue 專案的話,直接新增.env.development
和.env.production
檔案,然後在vue.config.js
裡面設定就好~
發表評論
想要加入討論嗎?請盡情發表您的想法!