2017-02-21 10 views

ответ

0

Посмотрите на this example repo.


Какую проблему решат ячейки?

Клетка отлично подходит для этой situtation:

  • У вас есть библиотека в репозитории, который строит с Buck
  • Вы хотите использовать эту библиотеку в проекте
  • Скопируйте библиотеку в ваш проект, но файлы библиотеки BUCK не работают, потому что корень (//) изменился на корень вашего проекта
  • Вы не хотите переписывать файлы вашей библиотеки BUCK!

Клетки позволяют нам создавать изолированные подпроекты, у которых есть свои .buckconfig и их собственная целевая иерархия Бака. Клетки могут использовать объекты из других ячеек, когда эти цели экспортируются.

Как это работает?

Мясо примера в .buckconfig:

[repositories] 
    neither = vendor/neither 

репозитории тег сообщает Buck, где каждая ячейка живет в структуре папок вашего проекта. Каждая ячейка имеет псевдоним. Здесь у нас есть neither = vendor/neither, что означает, что подпапка vendor/neither является ячейкой с именем neither.

Мы можем ссылаться на цели внутри ячейки, используя этот синтаксис: cell-name//:target-in-cell.

Таким образом, чтобы сделать наш пример целевой зависит от LoopPerfect/neither:

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

Это действительно мощное средство, потому что это делает библиотеки BUCK файлы портативными. Все, что вам нужно сделать, чтобы выявить цель внутри ячейки, должно сделать ее общедоступной:

visibility = [ 
    'PUBLIC', 
]