用 Bazel 构建 TypeScript 项目

    技术2024-12-07  13

    管理着无数的源码。在每个独立项目间都有依赖,比如Google Cloud 依赖于 Angular & Angular Material,Angular Material 又依赖于 Angular, 最后它们都依赖 TypeScript.

    在谷歌中,项目都有使用独立库(以及第三方库)的版本号。在公司内,这极大的简化了依赖管理。同时升级一个库,能影响所有依赖的项目,这样很方便。这样每个人都能从中得到好处,比如最新的安全更新,性能优化,Bug修复。这样做就意味着微软发布新的Typescript, 它会尽快的同步到谷歌内部,可以想你,Typescript的破坏性变更会影响许多代码!

    为了验证库升级后没有原来代码,在内部的持续集成中需要重新构建所有的依赖项目,并执行相应测试。因为有无数的TS文件,无数行TS代码,如果把控不好,整个过程可能需要点时间。

    多数情况,项目依赖其它项目,比如Google Cloud依赖它的UI和后端服务。当只更新Typescript时,既然后台服务不依赖Typescript,我们不希望它重新构建后台服务!

    为了构建项目,谷歌开源了这个Bazel工具。它是一个强大的工具,它可以跟踪不同的包间的依赖,并构建目标。简单说,一个构建就是一个构建规则,比如: “构建一下Typescript库”; 从项目看,一个包对应着一个文件夹中的许多文件,它有清晰的依赖包。在Google Cloud的示例中,Bazel会对应下面这么一个依赖关系

    Processed: 0.024, SQL: 9