# Angular Build 環境設定:自訂環境 vs Production Build ## 1. 自訂環境與 Production Build 的差別是什麼? Angular 在建置專案時,透過 angular.json 中的 fileReplacements 與 build configurations 來控制不同環境的建置行為。最常見的環境是 production,但你也可以自訂例如 uat、sit 等環境。 ### 環境檔替換(fileReplacements) ```json "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } ] ``` 這代表在 build 時會將 environment.ts 替換成 environment.prod.ts,以載入不同的設定值(如 API base URL、debug flag 等)。 ### Build 最佳化差異 | 項目 | Production 預設值 | 開發或自訂環境預設值 | |------------------|------------------|----------------------| | optimization | true | false | | sourceMap | false | true | | namedChunks | false | true | | extractLicenses | true | false | | vendorChunk | false | true | | buildOptimizer | true | false | | aot | true | false | ### 這些設定會顯著影響: - 打包體積大小 - 是否壓縮與優化代碼(tree-shaking) - 是否產生 .map 檔(方便除錯) - 預先編譯效率(AOT) ### Production Mode 在 environment.prod.ts 中,通常會設定: ``` export const environment = { production: true }; ``` 這會在 App 啟動時觸發: ``` if (environment.production) { enableProdMode(); } ``` 啟用 Production Mode 會: - 停用 Angular 的開發檢查與 debug log - 提升效能與渲染速度 ## 2. 如何建立一個像 Production 的自訂環境? 假設你要建立一個 uat 環境,具有與 production 相同的優化設定,可在 angular.json 中加入: ```json "configurations": { "uat": { "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.uat.ts" } ], "optimization": true, "sourceMap": false, "namedChunks": false, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true, "aot": true, "production": true } } ``` 並新增 `src/environments/environment.uat.ts`: ``` export const environment = { production: true, apiUrl: 'https://uat-api.example.com', enableDebugLog: false }; ``` 使用指令: `ng build --configuration uat` 即可編譯出與 production 相同優化程度的 build。 ## 3. 什麼時候該用 production build? - 適合使用 production build 的時機: - 要部署到正式環境(production server)時 - 需要最佳效能與最低檔案體積時 - 不需開發用 console log 或 source map 時 - 不適合使用 production build 的時機: - 本地端或測試環境需要進行除錯(需保留 source map) - 測試 UI 或行為調整時需保留 console.log 訊息 - 希望觀察非優化後的檔案結構或 bundle ## 結論 使用自訂環境(如 UAT、SIT)可以針對不同部署情境做靈活設定 若要與 production 有同樣效能,需明確指定各種優化設定與 production: true 正式上線請使用 production,測試與除錯則建議使用 development 或調整過的自訂環境