Buck 中的细胞是如何工作的?

How do cells work in Buck?

我知道有一个 in called cells. There are some tests 可以演示它们的工作原理,但是是否有更多关于它们的书面信息?

电池如何在 Buck 中工作?

看看this example repo


细胞解决了什么问题?

单元格非常适合这种情况:

  • 您在使用 Buck 构建的存储库中有一个库
  • 您想在项目中使用该库
  • 您将库复制到项目中,但库的 BUCK 文件不起作用,因为根目录 (//) 已更改为项目的根目录
  • 您不想重写图书馆的 BUCK 文件!

单元允许我们创建独立的子项目,这些子项目有自己的 .buckconfig 和自己的 Buck 目标层次结构。导出这些目标时,单元格可以使用来自其他单元格的目标。

它是如何工作的?

示例的主要内容在 .buckconfig:

[repositories]
  neither = vendor/neither

repositories 标签告诉 Buck 每个单元在项目文件夹结构中的位置。每个单元格都有一个别名。这里我们有 neither = vendor/neither,这意味着子文件夹 vendor/neither 是一个名为 neither.

的单元格

我们可以使用以下语法在单元格内引用目标:cell-name//:target-in-cell.

所以要使我们的示例目标依赖于 LoopPerfect/neither:

deps = [
  'neither//:neither',
],

这是一个非常强大的功能,因为它使库的 BUCK 文件可移植。要在单元格内公开目标,您需要做的就是使其成为 public:

visibility = [
  'PUBLIC',
]