bem-site / bem-forum-content-ru

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

Не работает сборка по enb make. В чем может быть причина ошибки? #1089

Open karalkou opened 8 years ago

karalkou commented 8 years ago
...
11:49:48.427 - [rebuild] [desktop.bundles\merged\merged.dirs] files
11:49:53.753 - [failed] [desktop.bundles\merged\merged.css] stylus
11:49:53.759 - [failed] [desktop.bundles\merged\_merged.css] borschik
11:49:53.759 - build failed
Error: D:\_my-work-tasks\project\desktop.bundles\merged\merged.css:21:14
   17| /* ../../template.blocks/header/header.styl:begin */
   18| @import "../../template.blocks/header/header.styl";
   19| /* ../../template.blocks/header/header.styl:end */
   20|
   21| /* ../../desktop.blocks/ico-location/ico-location.styl:begin */
--------------------^
   22| @import "../../desktop.blocks/ico-location/ico-location.styl";
   23| /* ../../desktop.blocks/ico-location/ico-location.styl:end */
   24|

Failed to @extend ".link"

    at D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\normalizer.js:406:17
    at Array.forEach (native)
    at Normalizer.extend (D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\normalizer.js:402:17)
    at Normalizer.visitGroup (D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\normalizer.js:279:8)
    at Normalizer.Visitor.visit (D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\index.js:28:40)
    at Normalizer.visitBlock (D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\normalizer.js:232:27)
    at Normalizer.Visitor.visit (D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\index.js:28:40)
    at Normalizer.extend (D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\normalizer.js:423:22)
    at Normalizer.visitGroup (D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\normalizer.js:279:8)
    at Normalizer.Visitor.visit (D:\_my-work-tasks\project\node_modules\enb-stylus\node_modules\stylus\lib\visitor\index.js:28:40)

Похоже, что какой-то блок зависит от link (используется @extend ".link"), но в сборку link попадает позже

Вопросы:

  1. как (где) можно посмотреть файлы с @import?
  2. правильно ли я понял суть ошибки?

И ещё, понимаю, что торможу, но есть какой-то способ сохранять комментарии разработчика в итоговом файле css?

karalkou commented 8 years ago

Так и не смог отловить, в чем проблема.

  1. пробежался по проекту, во всех блоках, где применялась конструкция @extend прописал в [имя_блока].deps.js зависимости от тех блоков, которые указаны в @extend
  2. но ошибка все-равно выскакивает
  3. ради интереса закомментировал все конструкции @extend в результате выдало следующую ошибку
17:52:04.734 - [rebuild] [desktop.bundles\merged\merged.js] file-merge
17:52:05.020 - [failed] [desktop.bundles\merged\_merged.css] borschik
17:52:05.021 - build failed
Error: No such file or directory: D:\_my-work-tasks\project\form.blocks\checkbox\__unreal\img\checkbox_empty.png
  -> D:\_my-work-tasks\project\desktop.bundles\merged\merged.css
    at exports.Tech.base.Tech.inherit.File.exports.File.base.File.inherit.processLink (D:\_my-work-tasks\project\node_modules\borschik\lib\techs\css-base.js:54:27)
    at exports.Tech.base.Tech.inherit.File.exports.File.base.File.inherit.processLink (D:\_my-work-tasks\project\node_modules\borschik\lib\techs\css.js:104:68)
    at res.(anonymous function).result [as processLink] (D:\_my-work-tasks\project\node_modules\borschik\node_modules\inherit\lib\inherit.js:82:40)
    at exports.Tech.INHERIT.File.exports.File.INHERIT.process (D:\_my-work-tasks\project\node_modules\borschik\lib\tech.js:139:54)
    at exports.Tech.base.Tech.inherit.File.exports.File.base.File.inherit.processInclude (D:\_my-work-tasks\project\node_modules\borschik\lib\techs\css.js:97:61)
    at exports.Tech.INHERIT.File.exports.File.INHERIT.process (D:\_my-work-tasks\project\node_modules\borschik\lib\tech.js:139:26)
    at exports.Tech.INHERIT.process (D:\_my-work-tasks\project\node_modules\borschik\lib\tech.js:34:56)
    at Cmd.<anonymous> (D:\_my-work-tasks\project\node_modules\enb-borschik\node_modules\borschik\lib\coa.js:138:38)
    at D:\_my-work-tasks\project\node_modules\enb-borschik\node_modules\borschik\node_modules\coa\lib\cmd.js:483:22
    at _fulfilled (D:\_my-work-tasks\project\node_modules\enb-borschik\node_modules\borschik\node_modules\coa\node_modules\q\q.js:798:54)

Полагаю, что в данном случае какая-то проблема с borschik... Может, кто подскажет, где я делаю не тру вещи? Вроде, все правильно делал:

// 1. в корне проекта лежит конфигурация .borschik
{
    "freeze_paths": {
        "img/**": "img",
        "**/*.blocks/**/fonts/**" : "fonts",
        "**/*.blocks/**": ":encodeURIComponent:",
        "**/*.blocks/**": ":base64:"
    }
}
// 2. конфигурация enb
var fs = require('fs'),
    path = require('path'),
    techs = {
        // essential
        fileProvider: require('enb/techs/file-provider'),
        fileMerge: require('enb/techs/file-merge'),

        // optimization
        borschik: require('enb-borschik/techs/borschik'),

        // css
        stylus: require('enb-stylus/techs/stylus'),

        // js
        browserJs: require('enb-js/techs/browser-js'),

        // bemtree
        // bemtree: require('enb-bemxjst/techs/bemtree'),

        // bemhtml
        bemhtml: require('enb-bemxjst/techs/bemhtml'),
        bemjsonToHtml: require('enb-bemxjst/techs/bemjson-to-html')

    },
    enbBemTechs = require('enb-bem-techs'),
    merged = require('./techs/merged'),
    levels = [
        { path: 'libs/bem-core/common.blocks', check: false },
        { path: 'libs/bem-core/desktop.blocks', check: false },
        'desktop.blocks',
        'form.blocks',
        'template.blocks'
    ];

module.exports = function(config) {
    var isProd = process.env.YENV === 'production',
        mergedBundleName = 'merged',
        pathToMargedBundle = path.join('desktop.bundles', mergedBundleName);

    fs.existsSync(pathToMargedBundle) || fs.mkdirSync(pathToMargedBundle);

    merged(config, pathToMargedBundle);

    config.nodes('*.bundles/*', function(nodeConfig) {
        var isMergedNode = path.basename(nodeConfig.getPath()) === mergedBundleName;

        isMergedNode || nodeConfig.addTechs([
            [techs.fileProvider, { target: '?.bemjson.js' }],
            [enbBemTechs.bemjsonToBemdecl]
        ]);

        nodeConfig.addTechs([
            // essential
            [enbBemTechs.levels, { levels: levels }],
            [enbBemTechs.deps],
            [enbBemTechs.files],

            // css
            [techs.stylus, {
                target: '?.css',
                sourcemap: false,
                autoprefixer: {
                    browsers: ['last 20 versions', 'IE > 8', 'Opera > 11', 'Firefox >= 5', 'Chrome > 10']
                }
            }],
            // bemtree
            // [techs.bemtree, { sourceSuffixes: ['bemtree.js', 'bemtree'] }],

            // bemhtml
            [techs.bemhtml, { sourceSuffixes: ['bemhtml.js', 'bemhtml'] }],
            [techs.bemjsonToHtml],

            // client bemhtml
            [enbBemTechs.depsByTechToBemdecl, {
                target: '?.bemhtml.bemdecl.js',
                sourceTech: 'js',
                destTech: 'bemhtml'
            }],
            [enbBemTechs.deps, {
                target: '?.bemhtml.deps.js',
                bemdeclFile: '?.bemhtml.bemdecl.js'
            }],
            [enbBemTechs.files, {
                depsFile: '?.bemhtml.deps.js',
                filesTarget: '?.bemhtml.files',
                dirsTarget: '?.bemhtml.dirs'
            }],
            [techs.bemhtml, {
                target: '?.browser.bemhtml.js',
                filesTarget: '?.bemhtml.files',
                sourceSuffixes: ['bemhtml.js', 'bemhtml']
            }],

            // js
            [techs.browserJs, { includeYM: true }],
            [techs.fileMerge, {
                target: '?.js',
                sources: ['?.browser.js', '?.browser.bemhtml.js']
            }],

            // borschik
            [techs.borschik, { sourceTarget: '?.js', destTarget: '_?.js', minify: isProd }],
            [techs.borschik, { sourceTarget: '?.css', destTarget: '_?.css', tech: 'cleancss', minify: isProd }],
        ]);

        nodeConfig.addTargets(isMergedNode ? ['_?.css', '_?.js'] : ['?.html']);
    });
};
tadatuta commented 8 years ago

@karalkou Есть возможность опубликовать проект на гитхаб, чтобы можно было посмотреть предметно?

mitrey commented 8 years ago

может, банально mustDeps не прописали для блока, который должен быть загружен до его использования в темлейте?

karalkou commented 8 years ago

@tadatuta Почистил и выложил https://github.com/karalkou/project_building

@mitrey вполне возможно) Проверял такую возможность, не нашел этого места

mitrey commented 8 years ago

@karalkou смотрите в каком блоке подключается блок .link и смотрите его deps.js Если блок используется вне bemjson - он должен быть явно указан как зависимость в deps.js

tadatuta commented 8 years ago

@karalkou https://github.com/karalkou/project_building/pull/1

karalkou commented 8 years ago

@tadatuta Спасибо. Стыдно, конечно, что сам не нашел. Я правильно понимаю, что найти эти ошибки можно только смотря на ругающуюся консоль и перелопачивая вручную проект? Сам правил в некоторых местах, но все найти не сумел. И ещё вопрос не по теме: что сделать, чтобы увидеть "вживую" файлы технологии levels?

karalkou commented 8 years ago

@mitrey Спасибо)

tadatuta commented 8 years ago

Я правильно понимаю, что найти эти ошибки можно только смотря на ругающуюся консоль и перелопачивая вручную проект? Сам правил в некоторых местах, но все найти не сумел.

Да, но там же буквально нужные строки/файлы в логе видны.

что сделать, чтобы увидеть "вживую" файлы технологии levels

Например, найти в node_modules пакет enb-bem-techs и после https://github.com/enb/enb-bem-techs/blob/v2.2.1/techs/levels.js#L118 добавить console.log(new Levels(levelList)).

Выхлоп примерно такой:

{ items:
   [ { _path: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks',
       blocks:
        { clearfix:
           { name: 'clearfix',
             files:
              [ { name: 'clearfix.css',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/clearfix/clearfix.css',
                  suffix: 'css',
                  mtime: 1462898160000,
                  isDirectory: false },
                { name: 'clearfix.en.title.txt',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/clearfix/clearfix.en.title.txt',
                  suffix: 'en.title.txt',
                  mtime: 1462898160000,
                  isDirectory: false },
                { name: 'clearfix.ru.md',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/clearfix/clearfix.ru.md',
                  suffix: 'ru.md',
                  mtime: 1462898160000,
                  isDirectory: false },
                { name: 'clearfix.ru.title.txt',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/clearfix/clearfix.ru.title.txt',
                  suffix: 'ru.title.txt',
                  mtime: 1462898160000,
                  isDirectory: false } ],
             dirs: [],
             elements: {},
             mods: {} },
          cookie:
           { name: 'cookie',
             files:
              [ { name: 'cookie.js',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/cookie/cookie.js',
                  suffix: 'js',
                  mtime: 1462898160000,
                  isDirectory: false },
                { name: 'cookie.ru.md',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/cookie/cookie.ru.md',
                  suffix: 'ru.md',
                  mtime: 1462898160000,
                  isDirectory: false },
                { name: 'cookie.spec.js',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/cookie/cookie.spec.js',
                  suffix: 'spec.js',
                  mtime: 1462898160000,
                  isDirectory: false } ],
             dirs: [],
             elements: {},
             mods: {} },
          dom:
           { name: 'dom',
             files:
              [ { name: 'dom.deps.js',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/dom/dom.deps.js',
                  suffix: 'deps.js',
                  mtime: 1462898160000,
                  isDirectory: false },
                { name: 'dom.js',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/dom/dom.js',
                  suffix: 'js',
                  mtime: 1462898160000,
                  isDirectory: false },
                { name: 'dom.ru.md',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/dom/dom.ru.md',
                  suffix: 'ru.md',
                  mtime: 1462898160000,
                  isDirectory: false },
                { name: 'dom.spec.js',
                  fullname: '/Users/tadatuta/projects/bem/project-stub/libs/bem-core/common.blocks/dom/dom.spec.js',
                  suffix: 'spec.js',
                  mtime: 1462898160000,
                  isDirectory: false } ],
             dirs: [],
             elements: {},
             mods: {} },

и так далее.

karalkou commented 8 years ago

@tadatuta а что изменилось при переходе со старых инструментов на новые? В плане неправильно прописанные пути до изображений, лежащих в блоках в старой сборке, съедаются без возмущений, а при запуске проекта с новыми - выскакивают ошибки.