一個(gè) Web 應(yīng)用本身應(yīng)該是無(wú)狀態(tài)的,并擁有根據(jù)運(yùn)行環(huán)境設(shè)置自身的能力。
框架有兩種方式指定運(yùn)行環(huán)境:
// config/env |
EGG_SERVER_ENV=prod npm start |
框架提供了變量 app.config.env 來(lái)表示應(yīng)用當(dāng)前的運(yùn)行環(huán)境。
不同的運(yùn)行環(huán)境會(huì)對(duì)應(yīng)不同的配置,具體請(qǐng)閱讀 Config 配置。
很多 Node.js 應(yīng)用會(huì)使用 NODE_ENV 來(lái)區(qū)分運(yùn)行環(huán)境,但 EGG_SERVER_ENV 區(qū)分得更加精細(xì)。一般的項(xiàng)目開(kāi)發(fā)流程包括本地開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境等,除了本地開(kāi)發(fā)環(huán)境和測(cè)試環(huán)境外,其他環(huán)境可統(tǒng)稱為服務(wù)器環(huán)境,服務(wù)器環(huán)境的 NODE_ENV 應(yīng)該為 production。而且 npm 也會(huì)使用這個(gè)變量,在應(yīng)用部署的時(shí)候一般不會(huì)安裝 devDependencies,所以這個(gè)值也應(yīng)該為 production。
框架默認(rèn)支持的運(yùn)行環(huán)境及映射關(guān)系(如果未指定 EGG_SERVER_ENV 會(huì)根據(jù) NODE_ENV 來(lái)匹配)
NODE_ENV | EGG_SERVER_ENV | 說(shuō)明 |
---|---|---|
local | 本地開(kāi)發(fā)環(huán)境 | |
test | unittest | 單元測(cè)試 |
production | prod | 生產(chǎn)環(huán)境 |
例如,當(dāng) NODE_ENV 為 production 而 EGG_SERVER_ENV 未指定時(shí),框架會(huì)將 EGG_SERVER_ENV 設(shè)置成 prod。
常規(guī)開(kāi)發(fā)流程可能不僅僅只有以上幾種環(huán)境,Egg 支持自定義環(huán)境來(lái)適應(yīng)自己的開(kāi)發(fā)流程。
比如,要為開(kāi)發(fā)流程增加集成測(cè)試環(huán)境 SIT。將 EGG_SERVER_ENV 設(shè)置成 sit(并建議設(shè)置 NODE_ENV = production),啟動(dòng)時(shí)會(huì)加載 config/config.sit.js,運(yùn)行環(huán)境變量 app.config.env 會(huì)被設(shè)置成 sit。
在 Koa 中我們通過(guò) app.env 來(lái)進(jìn)行環(huán)境判斷,app.env 默認(rèn)的值是 process.env.NODE_ENV。但是在 Egg(和基于 Egg 的框架)中,配置統(tǒng)一都放置在 app.config 上,所以我們需要通過(guò) app.config.env 來(lái)區(qū)分環(huán)境,app.env 不再使用。
更多建議: