- 發布於
Bazel 的基本認識
Bazel 是什麼?
A Build Tool (通常基於大型 monorepo) 它除了是一個 Build Tool 之外,更是一個
Build Tool Coordinator
。圖片來源 https://www.slideshare.net/7PeaksSoftware/abc-angular-bazel-cli
Incremental (只構建每次變動的部分)
它可以在任何框架和程式語言上工作
Scalable (可以透過多台電腦資源進行平行運算)
Bazel 的定位是什麼?
by AlexEagle at ng-conf 2019
其實它就像 Gulp 一樣,Bazel 本身不是真正在進行 Compile 或 Bundle 的工具主體。
它使用了當前現有的工具,來完成相關打包任務,而且 Bazel 正在擔任 coordinator 來管理這些依賴關係、這些工具的關係,並使他們一起工作。
從這個角度來看,Bazel 與 Gulp 類似
對於一個好的 Build Tool 的要求
基本要求:
- Correct (正確性)
確保每次構建完成的正確性,且我們不需要關心環境問題。
- Bazel使用沙箱隔離環境
- 沙盒支持Linux和Mac(不支持某些功能)
- Bazel 在 windows 上工作,新的 ws 輸出也支持一些沙箱
- Fast (快速完成 Compile)
Incremental 只建置含測試更改的部分、更新後的部分、受影響的部分,而不是從頭建置到尾。
Parallelism 還能利用雲的力量,要進行打包測試的集群,可以實現平行處理。
Predictable (可預測的)
- same input -> same output
Reusable (重複使用已編譯完成的結果)
- build rule/task can be composed and reused
- Correct (正確性)
確保每次構建完成的正確性,且我們不需要關心環境問題。
額外要求:
- Universal (通用性)
- Bazel不依賴任何指定的框架或語言,可以構建任何東西。
- Bazel是一個完美的構建工具,可用於在mono repo中進行全棧開發。
- Universal (通用性)
參考資料