bem-site / bem-forum-content-ru

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

Непонятки с ENB #89

Open awinogradov opened 10 years ago

awinogradov commented 10 years ago

Всем привет!

У меня есть три вопроса, помогите, кто может:

  1. Исходные данные вот https://gist.github.com/verybigman/6721df7ed4b4c13d771a Вопрос: Почему в декларацию не попадают блоки из зависимостей page и как это исправить?
  2. Нет ли у кого конфига ENB для сборки BEMTREE и BEMHTML по декларации?
  3. Можно ли сделать merge деклараций с помощью ENB и технологии merge?

Буду премного благодарен за любые пинки, я уже 3 часа промучался, ENB конфигуратор не предлагать:)

blond commented 10 years ago

Привет!

  1. Судя по конфигу декларация должна браться из ?.bemjson.js, а по твоему описанию, похоже, что ты хочешь писать ?.bemdecl.js сам. Расскажи подробнее что хочешь сделать, какие версии используешь и что в итоге попадает в ?.deps.js таргет.
  2. Если раскоментировать BEMTREE в project-stub, то должно подойти: https://github.com/bem/project-stub/blob/bem-core/.enb/make.js
  3. Можно =) Инфа про сборку merged-бандла: https://github.com/enb-make/enb#%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-merged-common-%D0%B1%D0%B0%D0%BD%D0%B4%D0%BB%D0%B0

На всякий случай напомню, что в любой непонятной ситуации не забываем чистить кэш rm -rf .enb/tmp или собирать с игнором кэша enb make -n. Можно ещё enb make clean для очистки всего ранее собранного.

awinogradov commented 10 years ago

@andrewblond В первом случае я и хочу собирать зависимости по bemjson. Похоже проблема была в кэше. Во-втором, попробую конфиг из project-stub, спасибо! Мержед будет работать для разных уровней?

Задача примерно такая: на одном уровне есть два бандла, хочу в одном собирать все по bemjson, ничего особенного, но тут не тянулись зависимости (точно как в примере, что я дал). А в другом бандле я хочу собирать только bemhtml и bemtree для клиента по декларации. Вроде ничего необычного:)

blond commented 10 years ago

Сейчас сборка для всех бандлов описана одинакого — config.nodes('project.bundles/*' /*...*/);. Нужно поразному задекларировать сборку разных типов бандлов.

Для этого вначале декларируем первую группу бандлов:

config.nodes(['project.bundles/bundle-1', 'project.bundles/bundle-2'] /*...*/);

а затем вторую:

config.nodes(['project.bundles/bundle-2', 'project.bundles/bundle-3'] /*...*/);

То, что будет совпадать можно вынести в обзую декларацию:

config.nodes('project.bundles/*' /*...*/);

Но для начала советую копипастить, убедиться, а потом уже выделять общие части.

awinogradov commented 10 years ago

@andrewblond Блин, Андрюх:) Да, надо разные конфиги для бандлов, вопрос был какие:)

blond commented 10 years ago

Примерно так (не проверял):

config.nodes('*.bundles/bundle-1', function(nodeConfig) {
    nodeConfig.addTechs([
        // essential
        [tech.levels, { levels: getLevels(config) }],
        [tech.fileProvider, { target: '?.bemjson.js' }],
        [tech.bemdeclFromBemjson],
        [tech.deps],
        [tech.files],

        // css
        [tech.cssStylus, { target: '?.noprefix.css' }],
        [tech.cssAutoprefixer, {
            sourceTarget: '?.noprefix.css',
            destTarget: '?.css',
            browserSupport: getBrowsers()
        }],

        // bemhtml
        [tech.bemhtml, { devMode: process.env.YENV === 'development' }],
        [tech.htmlFromBemjson],

        // client bemhtml
        [tech.bemdeclFromDepsByTech, {
            target: '?.bemhtml.bemdecl.js',
            sourceTech: 'js',
            destTech: 'bemhtml'
        }],
        [tech.deps, {
            target: '?.bemhtml.deps.js',
            sourceDepsFile: '?.bemhtml.bemdecl.js'
        }],
        [tech.files, {
            target: '?.bemhtml.deps.js',
            filesTarget: '?.bemhtml.files',
            dirsTarget: '?.bemhtml.dirs'
        }],
        [tech.bemhtml, {
            target: '?.browser.bemhtml.js',
            filesTarget: '?.bemhtml.files',
            devMode: process.env.YENV === 'development'
        }],

        // js
        [tech.browserJs],
        [tech.fileMerge, {
            target: '?.pre.js',
            sources: ['?.browser.bemhtml.js', '?.browser.js']
        }],
        [tech.prependYm, { source: '?.pre.js' }]
    ]);

    nodeConfig.addTargets(['?.html', '?.css', '?.js']);
});

config.nodes('*.bundles/bundle-2', function(nodeConfig) {
    nodeConfig.addTechs([
        // essential
        [tech.levels, { levels: getLevels(config) }],
        [tech.fileProvider, { target: '?.bemdecl.js' }],
        [tech.deps],
        [tech.files],

        // client bemhtml
        [tech.bemdeclFromDepsByTech, {
            target: '?.bemhtml.bemdecl.js',
            sourceTech: 'js',
            destTech: 'bemhtml'
        }],
        [tech.deps, {
            target: '?.bemhtml.deps.js',
            sourceDepsFile: '?.bemhtml.bemdecl.js'
        }],
        [tech.files, {
            target: '?.bemhtml.deps.js',
            filesTarget: '?.bemhtml.files',
            dirsTarget: '?.bemhtml.dirs'
        }],
        [tech.bemhtml, {
            target: '?.browser.bemhtml.js',
            filesTarget: '?.bemhtml.files',
            devMode: process.env.YENV === 'development'
        }],

        // client bemtree
        [tech.bemdeclFromDepsByTech, {
            target: '?.bemtree.bemdecl.js',
            sourceTech: 'js',
            destTech: 'bemtree'
        }],
        [tech.deps, {
            target: '?.bemtree.deps.js',
            sourceDepsFile: '?.bemtree.bemdecl.js'
        }],
        [tech.files, {
            target: '?.bemtree.deps.js',
            filesTarget: '?.bemtree.files',
            dirsTarget: '?.bemtree.dirs'
        }],
        [tech.bemtree, {
            target: '?.browser.bemtree.js',
            filesTarget: '?.bemtree.files',
            devMode: process.env.YENV === 'development'
        }],

        // merge bemhtml & bemtree + ym
        [tech.fileMerge, {
            target: '?.template.pure.js',
            sources: ['?.browser.bemhtml.js', '?.browser.bemtree.js']
        }],
        [tech.prependYm, { source: '?.template.pure.js', target: '?.template.js' }]
    ]);

    nodeConfig.addTargets(['?.template.js']);
});

function getLevels(config) {
    return [
        { path : 'libs/bem-core/common.blocks', check : false },
        { path : 'libs/bem-components/common.blocks', check : false },
        { path : 'libs/bem-components/desktop.blocks', check : false },
        { path : 'libs/forms/default.blocks', check : false },
        { path : 'libs/forms/design/default.blocks', check : false },
        { path : 'libs/forms/design/themed.blocks', check : false },
        'common.blocks',
        'project.blocks'
    ].map(function(level) {
        return config.resolvePath(level);
    });
}

function getBrowsers() {
    return [
        'last 2 versions',
        'ie 10',
        'opera 12.16'
    ];
}
awinogradov commented 10 years ago

Спасибо!!!