enb / enb-bem-docs

BEM docs for ENB
Other
10 stars 5 forks source link

Examples prebuild may try to create same synlink several times and fail the build #51

Open tadatuta opened 9 years ago

tadatuta commented 9 years ago

magic run docs при первом запуске ругается на блоки, у которых у примеров есть кастомные уровни, что таргетовый симлинк уже существует: Error: EEXIST, symlink '/Users/tadatuta/Sites/bem-lib-builder/tmp/data/bem-components/touch-pad.examples/modal/10-modal/blocks', а при повторном собирается.

Вот здесь https://github.com/enb-bem/enb-bem-pseudo-levels/blob/master/lib/pseudo-level-builder.js#L79 вызовы symlink() произойдут параллельно, а не последовательно и, соответственно, проверка на существование для нескольких одинаковых симлинок случится примерно в один момент, вернет false и попробует создать новую.

Если переписать https://github.com/enb-bem/enb-bem-pseudo-levels/blob/master/lib/pseudo-level-builder.js#L7-L23 на синхронный вариант типа

function symlink(source, targetPath) {
    require('mkdirp').sync(path.dirname(targetPath));

    if (require('fs').existsSync(targetPath)) return;

    var relativeSourcePath = path.relative(path.dirname(targetPath), source.sourcePath);
    fs.symlinkSync(relativeSourcePath, targetPath, source.isDirectory ? 'dir' : 'file');
    return true;
}

то падать перестает.

Возможно это как-то связано с тем, что в enb-magic-factory в magic-helper зовется makePlatform.init(), который повторно дергает .enb/make.js и в результате заново пушатся все configure() для docs и examples.