bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

enb-magic-platform #450

Open Guria opened 9 years ago

Guria commented 9 years ago

Продолжаю погружение. Давно мучает вопрос, что именно делает enb-magic-platform. Какова его роль в bem-core/bem-components. Должен ли я его хотеть для своей библиотеки.

qfox commented 9 years ago

/cc @blond

blond commented 9 years ago

@Guria, если совсем вкратце, то само по себе ENB умеет собирать только ноды, которые уже есть на файловой системе, и не умеет ноды, которые могут появляться в процессе сборки.

Для того, чтобы это стало возможным был написан enb-magic-fatory. Если нужно подробнее — можно попробовать разобраться по jsdoc внутри, или спрашивать тут.

А enb-magic-platform это тот же make + server из ENB, но который умеет работать со специальными __magic__ тасками, а если надо деградировать до обычных задач сборки.

enb-magic-fatory используется в пакетах, где нужно собирать сеты (sets), а именно в:

Поэтому enb-magic-platform нужен там, где используются эти пакеты.

Guria commented 9 years ago

Как минимум enb-bem-specs, enb-bem-tmpl-specs было желание использовать. Придётся разбираться, хотя пока не очень легко даётся.

blond commented 9 years ago

@Guria Для того, чтобы использовать enb-bem-specs и enb-bem-tmpl-specs — разбираться в enb-magic-* пакетах не нужно.

Как использовать:

$ magic --help

ENB magic platform

Usage:
  magic COMMAND [OPTIONS] [ARGS]
  magic [OPTIONS] [ARGS]

Commands:
  make : build specified targets
  run : run specified tasks
  server : run development server

Options:
  -h, --help : Help
  -v, --version : version
apsavin commented 9 years ago

ENB умеет собирать только ноды, которые уже есть на файловой системе, и не умеет ноды, которые могут появляться в процессе сборки.

@blond, а когда я в make объявляю технологию с выходом в таргет N и технологию, для которой вход - это N, а выход - M - это разве не сборка нод, которые появляются в процессе сборки? Или я что-то неправильно понимаю?

blond commented 9 years ago

@apsavin, ты говоришь о сборке таргетов в рамках уже существующей ноды. И какие ноды, и какие таргеты будут в итоге известно до момента сборки.

Речь, о:

  1. На вход уровни переопределения.
  2. По ним генерируем сеты. Это и есть эти ноды, которые появляются в процессе сборки.
  3. Собираем таргеты в этих нодах.

Пример, из жизни:

  1. Уровни переопределения с md-файлами. В md-файлах есть инлайновые примеры (вставки BEMJSON кода).
  2. На выход хочется получить сеты с собранными примерами.
  3. Имена для инлайновых примеров — хэш-сумма от их содержимого.
  4. До момента сборки не извесно, о том какие ноды существуют, потому что не извесно какие примеры записаны в md-файлах.

Но, если в консоли написать следующее:

$ magic make desktop.examples/button/kv8lnJvLGr2co198HaREk26qsgQ/kv8lnJvLGr2co198HaREk26qsgQ.bemjson.js

То всё хорошо соберётся:

desktop.examples/
    button/
        kv8lnJvLGr2co198HaREk26qsgQ/kv8lnJvLGr2co198HaREk26qsgQ.bemjson.js

Если при этом в make.js задекларировать сборку нод *.examples/*/* как сборку обычных страниц, то в примерах соберётся не только BEMJSON, но и HTML, css, js и т.д.

apsavin commented 9 years ago

Понятно, спасибо. В самом деле magic.

Guria commented 9 years ago

@blond enb-bem-specs и enb-bem-tmpl-specs поставляются со своим nodeconfigurator. Можно ли использовать эти модули если у меня процесс сборки немного отличается?

blond commented 9 years ago

Подозреваю, что для enb-bem-tmpl-specs можно, а для enb-bem-specs нельзя.

@Guria, но уточни, пожалуйста, в чём нужна кастомизация.

Guria commented 9 years ago