bem-site / bem-forum-content-ru

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

bemdecl вместо bemjson #370

Open kompolom opened 9 years ago

kompolom commented 9 years ago

Подскажите как настроить enb на сборку динамического сайта, так, чтобы bemdecl не генерировался при каждой сборке. Хочу руками прописать туда нужны блоки.

qfox commented 9 years ago

bemdecl генерируется, потому что ты подключаешь bemjsonToBemdecl и у тебя есть bemjson.js файл.

Если убрать bemjson.js — надо будет убирать и bemjsonToHtml, потому что в этом файле еще и контент для страницы.

Т.е. убираешь bemjsonToBemdecl, убираешь технологию и таргет html, и в бандлах вместо bemjson сохраняешь bemdecl.js файлы.

kompolom commented 9 years ago

Вроде все так и есть, может что то пропустил? https://gist.github.com/kompolom/bc610150fb509b5f8c0b#file-make-js

вываливается с ошибкой

Error: There is no tech for target desktop.bundles/index/index.bemdecl.js.
qfox commented 9 years ago

А, ну да, надо еще запровайдить bemdecl путем его чтения. enb такой enb.

https://github.com/enb-bem/enb-bem-techs#bemjsontobemdecl

    [provide, { target: '?.bemdecl.js' }],

По идее так должно работать.

Призову на всякий @blond.

blond commented 9 years ago

@zxqfox всё так ;)

Технология для провайда — https://github.com/enb-make/enb/blob/master/techs/file-provider.js

kompolom commented 9 years ago

@zxqfox, спасибо, так завелось.

а bemdecl компактней чем сгенерированный из bemjson можно как то писать?

qfox commented 9 years ago

@kompolom Не подскажу ;-(. Может быть @blond или @tadatuta что-то порекомендуют?

qfox commented 9 years ago

@kompolom Вообще, технически это же JS, и если имеется ввиду:

module.exports.blocks = [
  { name: 'block1' },
  { name: 'block2' },
  { name: 'block3' }, // etc.
];

По формату, опускаемым частям — не уверен, что можно.

blond commented 9 years ago

@kompolom, если руками, то можно.

Вкратце формат BEMDECL v1 можно описать так:

exports.blocks = [
  {
    name: 'input',       // имя блока
    mods: [              // список модификаторов
      { name: 'size',    // имя модификатора
        vals: [          // список значений модификатора
          { name: 'm' }, // значение модификатора
          { name: 's' }  // значение модификатора
        ]
      }
    ],
    elems: [                      // список элементов
      { name: 'control',          // имя элемента
        mods: [                   // список модификаторов элемента
          { name: 'theme',        // имя модификатора элемента
            vals: [               // значения модификатора элемента
              { name: 'islands' } // зачение модификатора элемента
            ]
          }
        ]
      }
    ]
  }
];