Sourcegraph项目中Bazel在客户端开发中的应用指南

Sourcegraph项目中Bazel在客户端开发中的应用指南

sourcegraph Code AI platform with Code Search & Cody sourcegraph 项目地址: https://gitcode.com/gh_mirrors/so/sourcegraph

前言

在现代前端开发中,构建工具的选择对开发效率和项目维护至关重要。Sourcegraph项目采用了Bazel作为其构建系统,特别是在客户端开发中发挥了重要作用。本文将深入解析Sourcegraph项目中Bazel在客户端开发的应用实践。

Bazel在客户端开发中的核心工具

Sourcegraph客户端项目使用Bazel进行编译、打包和测试,主要依赖以下工具链:

  1. 打包工具

    • Esbuild:用于高效的代码打包,以其极快的构建速度著称
  2. 测试框架

    • Vitest:现代化的单元测试框架
    • Mocha:经典的JavaScript测试框架
  3. 代码生成工具

    • graphql-codegen:用于生成GraphQL schema类型定义

这些工具通过以下Bazel规则集集成到构建系统中:

  • rules_js:提供JavaScript项目支持
  • rules_ts:提供TypeScript项目支持
  • rules_esbuild:集成Esbuild打包工具

主要构建目标解析

Sourcegraph客户端项目的Bazel目标配置与pnpm工作区项目大致对应,通常由多个子目标组成。通过bazel configure命令生成的主要目标包括:

  1. 核心构建目标

    • :{name}_pkg:代表pnpm项目的npm包
    • :test:项目的Vitest单元测试
    • :{name}_lib:编译非测试的TypeScript文件
    • :{name}_tests:编译单元测试的TypeScript文件
  2. 特殊构建目标

    • Sass编译
    • GraphQL schema生成等

构建配置实践指南

配置文件管理

  • BUILD.bazel文件通常位于各项目目录下
  • 鼓励创建多个小型、可独立缓存的构建目标
  • 主要目标的srcsdeps属性由bazel configure自动生成

配置注意事项

  1. 手动修改保护

    • 任何需要保留的手动修改必须以# keep注释结尾
    • 否则会在下次运行bazel configure时被覆盖
  2. TypeScript类型导入

    • 当前bazel configure不支持TypeScript类型导入
    • 需要手动添加到deps属性中

测试执行策略

全量测试执行

bazel test //client/...

指定测试执行

bazel test //client/common:test
bazel test //client/web/src/end-to-end:e2e

调试测试

bazel run --config=debug //client/common:test

打包配置

主客户端打包目标位于:

//client/web:bundle

规则配置实践

大多数客户端规则都是在dev/*.bzl中定义的宏,确保整个代码库中使用一致的配置。

常见问题解决方案

Bazel配置失败排查

  1. 日志分析

    • 仔细检查Bazel输出日志,特别是关于缺失模块或类型声明的错误
  2. 环境对比

    • 本地运行相同测试,与CI环境结果对比
  3. 类型缺失处理

    • 手动添加缺失依赖到deps属性
    • 确保添加# keep注释
  4. 配置更新

    • 运行bazel configure更新配置

执行JavaScript二进制文件

  1. 导入规则

    load("@npm//:rawr/package_json.bzl", my_alias = "bin")
    
  2. 可用目标

    • rawr:用于bazel build
    • rawr_binary:用于bazel run
    • rawr_test:用于bazel test
  3. 创建构建目标

    my_alias.rawr(
      name = "rawr_event",
      srcs = ["earth.js"],
      args = ["-event", "asteroid"],
    )
    

特定类型目标构建测试

  1. 全项目类型检查

    bazel test `bazel query 'attr("name", ".*_typecheck_test", //...)'`
    
  2. 指定项目检查

    bazel test `bazel query 'attr("name", ".*_typecheck_test", //client/vscode...)'`
    

ESLint执行

bazel test `bazel query 'attr("name", ".*_eslint$", //client/wildcard/...)'`

结语

Sourcegraph项目中Bazel在客户端开发的应用展示了现代构建系统在前端工程中的强大能力。通过合理的规则配置和构建目标划分,实现了高效的开发工作流。掌握这些实践技巧,将显著提升在Sourcegraph项目中的开发效率。

sourcegraph Code AI platform with Code Search & Cody sourcegraph 项目地址: https://gitcode.com/gh_mirrors/so/sourcegraph

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓬玮剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值