Войти с помощью github

Возможно ли это? Сейчас все крутится в gulp. Нужно чтобы сборка осуществлялась на локальном компьютере, а результаты выкладывались на сервер (абсолютный путь). Ибо при запуске на сервере все работает очень медленно.

Читая документацию к enb-bem-techs возник вопрос - возможно ли настроить сборку на deps.js не пользуя bemdecl?

Создал проект веб-страницы (результат). Внутри использую свой слайдер, который находится в библиотеке, подключаемой через bower (https://github.com/Oopscurity/oopsy). измененный make.js

При сборке и запуске страницы в консоли браузера получаю следующее сообщение: Uncaught Error: Module "image": can't resolve dependence "lightbox"

На странице как image с js: true, так и lightbox не используются. Помогает (и это понятно) комментирование image.js в коде установленной библиотеки.

Демо: работа слайдера, лайтбокса. Все собирается и работает без нареканий.

Помогите, пожалуйста, разобраться, в чем проблема.

Всем привет! Помогите разобраться с make.js.

https://github.com/proudwax/ergo-bem_tree/blob/static/.enb/make.js

Если использовать: [enbBemTechs.depsByTechToBemdecl, { target: folder + '_' + page + '.bemhtml.bemdecl.js', sourceTech: 'js', destTech: 'bemhtml' }],

То требует для сборки файл с названием каталога, в котором располагается сборка. В моём случае view, но мне необходимо view_*. Изменил deps-by-tech-to-bemdecl.js, под себя: this._filesTarget = path.basename(this._options.target, '.bemhtml.bemdecl.js') + '.tmp.files'; , но в итоге хорошего ничего не вышло. Что не так делаю, подскажите?

8 years ago

YENV

Всем привет, хотелось бы подробнее узнать о переменной YENV, есть какая-нибудь дополнительная информация, ссылки? :)

В #829 Я писал о странном поведении html-differ, Который вдруг начал учитывать порядок атрибутов в html. Сейчас выяснилось что такое поведение связанно с тегом <noscript> все что в этом теге html-differ сравнивает как простые сроки.

Хотелось бы узнать, это бага или фича?

Зачем мне это все. Мы делаем блок ленивой загрузки картинок. Для пользователей без js заворачиваем img в noscript cc @eGavr

Хотелось бы узнать как происходит процесс отладки бэм инструментов. (Или все просто ниндзя в js и им отладчик не нужен?)

У меня падает сборка спеков. То что вываливается в консоль - лишь промис. Каков алгоритм поиска ошибки?

Разбирая рекомендации от @blond в pull-request: https://github.com/enb-make/enb/pull/426

Переделал технологию write-file и поменял тест. Тест сделал с проверкой контента в файле и он отвалился!

Реализовал небольшой проектик, в общем провел такой путь: https://github.com/enb-make/enb/pull/426#issuecomment-177334190

И действительно, получил в контенте файла undefined вместо переданного мной контента.

Поставил console.trace(args); вот в это место: https://github.com/dfilatov/vow-fs/blob/master/lib/fs.js#L28

Вот, что он выдал:

 enb make

Trace: [ '~/Projects/opensource/test-enb/.enb/tmp',
  undefined,
  [Function] ]
    at ~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:28:25
    at ~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:316:24
    at Array.<anonymous> (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:712:56)
    at Immediate.callFns [as _onImmediate] (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:23:35)
    at processImmediate [as _immediateCallback] (timers.js:383:17)
Trace: [ '~/Projects/opensource/test-enb/.enb/tmp',
  [Function] ]
    at Object.stat (~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:28:25)
    at Object.module.exports.isDir (~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:234:21)
    at onFailed (~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:307:28)
    at Array.<anonymous> (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:712:56)
    at Immediate.callFns [as _onImmediate] (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:23:35)
    at processImmediate [as _immediateCallback] (timers.js:383:17)
03:09:57.177 - build started
Trace: [ '~/Projects/opensource/test-enb/bundle',
  undefined,
  [Function] ]
    at ~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:28:25
    at ~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:316:24
    at Array.<anonymous> (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:712:56)
    at Immediate.callFns [as _onImmediate] (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:23:35)
    at processImmediate [as _immediateCallback] (timers.js:383:17)
Trace: [ '~/Projects/opensource/test-enb/bundle',
  [Function] ]
    at Object.stat (~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:28:25)
    at Object.module.exports.isDir (~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:234:21)
    at onFailed (~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:307:28)
    at Array.<anonymous> (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:712:56)
    at Immediate.callFns [as _onImmediate] (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:23:35)
    at processImmediate [as _immediateCallback] (timers.js:383:17)

// called builder in techs/write-file.js

Trace: [ '~/Projects/opensource/test-enb/bundle/bundle.md',
  '## Test \n this a test text',
  { encoding: 'utf8' },
  [Function] ]
    at Object.<anonymous> (~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:28:25)
    at ~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:46:35
    at Object.vow.invoke (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:1050:20)
    at Object.Queue._runTask (~/Projects/opensource/test-enb/node_modules/vow-queue/lib/queue.js:204:27)
    at Object.Queue._run (~/Projects/opensource/test-enb/node_modules/vow-queue/lib/queue.js:186:18)
    at processImmediate [as _immediateCallback] (timers.js:383:17)
03:09:57.201 - [rebuild] [bundle/bundle.md] write-file
Trace: [ '~/Projects/opensource/test-enb/bundle/bundle.md',
  'undefined',
  'utf8',
  [Function] ]
    at Object.<anonymous> (~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:28:25)
    at ~/Projects/opensource/test-enb/node_modules/vow-fs/lib/fs.js:46:35
    at Object.vow.invoke (~/Projects/opensource/test-enb/node_modules/vow/lib/vow.js:1050:20)
    at Object.Queue._runTask (~/Projects/opensource/test-enb/node_modules/vow-queue/lib/queue.js:204:27)
    at Object.Queue._run (~/Projects/opensource/test-enb/node_modules/vow-queue/lib/queue.js:186:18)
    at processImmediate [as _immediateCallback] (timers.js:383:17)
03:09:57.206 - build finished - 38ms

Так вот и вопрос, это баг или фича гонять по два раза?

Может я чего не так использую?

При сборке enb генерирует кучу промежуточных файлов, есть ли вариант удалить в папке с бандлом все кроме того что явно добавлено в конфиге c помощью addTargets()?

Как я понимаю за компиляцию bemjson в html отвечает эта команда https://github.com/bem/project-stub/blob/bem-core/.enb/make.js#L62 А в технологии bemjson-to-html такой опции нет и все компилится в одну строку

Пользуюсь сборщиком enb, в enb-make определил две сборки, production и development, вот так:

config.mode("production", function () {...

в зависимости от режима определяю уровень переопределения env:

config.mode("production", function () {
    config.node("bundles/proj", function (nodeConfig) {
        nodeConfig.addTechs([
            [ require("enb-bem-techs/techs/levels"), {levels: getLevels([{"path": "blocks/env/production", "check": false}])} ],...

Функция getLevels:

function getLevels(levels) {
    levels = levels || [];
    return levels.concat[
        {"path": "libs/bem-core/common.blocks", "check": false},
        {"path": "lib.modules", "check": false},
        {"path": "blocks/translation.blocks", "check": false},
        {"path": "blocks/common.blocks", "check": true},
    ].map(function (l) { return config.resolvePath(l); });
}

Для development естественно путь указан к папке development

В проекте все так лежит: blocks/env/production/env.js и blocks/env/development/env.js, Содержимое файлов: modules.define('env', [], provide => { provide('development') }); (или production, в зависимости от файла).

В компоненте, для которого есть разница между development и production режимами подключаю env, и уже от него пляшу

При сборке YENV=production enb-make -n сборщик все-равно подключает /development/env.js, мало того, удаление всей папки env/development приводит к тому что в продакшн моде все-равно подключается development файл. С другой стороны, после того как файл env/development/env.js оказывается недоступным во время development сборки (enb make -n) сборщик ругается на отсутствие файла/папки. В чем проблема, и как еще можно из компонента получить доступ к переменной YENV?

Вот тут ожидается ошибка в случае если нет файла https://github.com/enb-make/enb/blob/master/techs/file-provider.js#L46

А что, если добавить проверку на параметр content и если оный имеется, то создать файл ну как-то так:

build: function () {
        var promise;
        var target;
        var targetPath;
        var _this = this;
        promise = Vow.promise();
        target = this.node.unmaskTargetName(this._target);
        targetPath = this.node.resolvePath(target);
        fs.exists(targetPath, function (exists) {
            if (exists) {
                _this.node.resolveTarget(target);
            } else {
                if (_this._content === undefined) {
                    _this.node.rejectTarget(target, new Error('File not found: ' + targetPath));
                } else {
                    fs.writeFile(targetPath, _this._content, _this._options || {}, function (error) {
                        if (error) {
                            _this.node.rejectTarget(target, error);
                            return;
                        }
                        _this.node.resolveTarget(target);
                    });
                }
            }
            return promise.fulfill();
        });
        return promise;
    },

Чего скажете? Полезно будет али нет?

Проект тут: https://github.com/mikhailmakarov/zhifu-first-bem

Задача собрать всю статику и html, css, js в папку dist. Подскажите пожалуйста.

Я только начал изучать BEM. Может я что-то не правильно делаю.

Вот что в npm-debug.log при выполнении команды npm run dist:

17 error Windows_NT 6.3.9600 18 error argv "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" "run" "dist" 19 error node v5.1.1 20 error npm v3.3.12 21 error code ELIFECYCLE 22 error zhifu-first-bem@1.0.0 dist: YENV=production enb make dist 22 error Exit status 1 23 error Failed at the zhifu-first-bem@1.0.0 dist script 'YENV=production enb make dist'. 23 error Make sure you have the latest version of node.js and npm installed. 23 error If you do, this is most likely a problem with the zhifu-first-bem package, 23 error not with npm itself. 23 error Tell the author that this fails on your system: 23 error YENV=production enb make dist 23 error You can get their info via: 23 error npm owner ls zhifu-first-bem 23 error There is likely additional logging output above. 24 verbose exit [ 1, true ]

Привет, давно ничего не рассказывал, а есть о чём — исправляюсь.

Версия ENB 1.0.0 появилась пару месяцев назад. Многие из вас, наверное, уже увидели этот релиз, а может даже успели перейти.

Но я всё же расскажу, зачем оно нам. Основная цель релиза — не сделать ничего полезного, и мы с этой целью прекрасно справились =)

Но это ещё не всё.

API

Единственный способ использовать ENB до 1.x — подключать модули, указывая путь к ним.

var buildFlow = require('enb/lib/build-flow'),
    BaseTech = require('enb/lib/tech/base-tech'),
    FileList = require('enb/lib/file-list'),
    asyncFs = require('enb/lib/fs/async-fs.js');

Такой способ не даёт возможности отличить модули, предназначенные для внешнего использования от внутренних, не предназначенных никому, кроме самого ENB.

Начиная с версии 1.0.0 мы предоставили всё необходимое с помощью API.

var enb = require('enb');

enb.buildFlow // Хэлпер для создания технологий
enb.BaseTech  // Базовая технология, от которой можно унаследоваться
enb.FileList  // Класс для передачи списка файлов в технологию 
enb.asyncFs   // vow-fs

Важно: если вы используете модули, которые не предоставляются посредством API, то делаете это на свой страх и риск. Это внутренняя реализация, а значит нет никакой гарантии в соблюдении обратной совместимости в минорных или патчевых версиях.

Технологии

Пакет ENB — это, прежде всего, ядро и хэлперы для создания технологий. Сами технологии должны храниться в отдельных пакетах.

Поэтому мы удалили все устаревшие технологии, а также те, которые переехали в другие пакеты. Остались только 4 технологии для работы с файлами:

При создании технологий вы могли использовать некоторые из утилит. Мы вынесли их в отдельные пакеты:

Модуль drop-require-cache был удалён. Вместо него нужно использовать clear-require.

Если вы использовали css-preprocessor, то мы рекомендуем заменить его на PostCSS, особенно если вы используете Autoprefixer. А для плавного перехода css-preprocessor вынесен в отдельный пакет.

История изменений

Подробнее о всех изменениях читайте в примечании к релизам: v1.0.0, v1.0.1, v1.1.0, v1.1.1.

Вопросы про сборщик ENB традиционно ждем на нашем форуме с меткой enb.

Приятного использования!

У меня в проекте в каждом из блоков может быть/или не быть папка img, в корой лежат png-шки. Как собирать их при сборке в папку bundles//img/.\ пользуясь вышеуказанными технологиями?

Привет!

Выпустил новый плагин для ENB, который ведет себя, как DefinePlugin для webpack: ищет в коде бандла плейсхолдеры с названием переменных и заменяет их на соответствующие значения.

Например, можно выводить отладочную информацию в dev-окружении, а при сборке в продакшен полностью удалять этот код за счет того, что код вида

if (false) {
    console.log('debug info');
}

полностью вырезается оптимизаторами вроде uglify-js.

Добре люди!

Занимаюсь формированием тестов через enb-bem-specs коя использует bem-pr

Так вот, при формировании странички блок spec в bem-pr перетирает себя так

block spec, default: applyCtx({ block: 'mocha' })

Но стало понятно, что для тестирование некоторых блоков нам нужно куда-то проинициализировать заранее шаблоны. Сделать это легко можно посредством BH (BEMHTML). Чтобы не нарушать идилию с блоком mocha появилась идея добавить еще один блок spec-content

Было (bem-pr/spec.blocks/spec/spec.bh.js):

module.exports = function(bh) {

bh.match('spec', function() {
    return { block : 'mocha', attrs: { id: 'mocha'} };
});

};

Стало:

module.exports = function(bh) {

bh.match('spec', function(ctx) {
    ctx.tag(null);
    ctx.content([
        {
            block: 'mocha'
        },
        {
            block: 'spec-content'
        }
    ]);
});

};

Подскажите, как будет верно тоже самое реализовать в BEMHTML, для того же блока?

Наконец научились запускать unit-тесты с enb-bem-specs

Пришлось, правда немного его доработать и даже были сделаны пулл-реквесты на основную репу.

Но как только начали массово внедрять поняли одну проблему.

enb-bem-specs тянет за собой тяжелые зависимости в виде phantomjs и остального по мелочи.

Однако у всех разработчиков уже есть PhantomJS и порой он по версиям сильно отличается.

Дошли до того, что не плохо было бы запускать фантом под докером, и обращаясь к докеру уже запускать тесты.

А вот зависимость из enb-bem-specs выпилить.

@blond были ли такие мысли насчет этого?

Да, и кстати, это упрощает запуск тестов на CI - задав нужное окружение.

Здравствуйте. Есть проблема, не получается решить ( Корневой блок page имеет модификатор theme. В файле theme.styl указана переменная borderColor1 = #A9A9A9 Дальше по коду есть блок search, у которого цвет бордера берётся из этой переменной. Но он не применяется

.search__header
  & .control-group
    background-color borderColor1

В файле deps.js блока search прописан блок page

({
    mustDeps: {
        block: 'page',
    }
})

Где то туплю, но не пойму где ( Помогите пожалуйста!

Добре!

Тут обнаружил, что спеки у меня генерируются, а вот тесты не запускаются.

enb-bem-spec пишет, что мод тесты не прошли. Оказалось, у меня проблема с фатномом. После того как я засунул вывод ошибки в этом месте

https://github.com/enb-bem/enb-bem-specs/blob/master/lib/runner.js#L166-L169

в консоль.

Написал так:

.then(function (err) {
        if (errorCount) {

            console.log(err); //<- 

            return vow.reject(new Error('specs: ' + errorCount + ' failing'));
        }
    }) : vow.resolve([]);

Вывод:

[ { _value: 
     { [Error: Command failed: /bin/sh -c /home/Projects/bem-project/node_modules/enb-bem-specs/node_modules/.bin/mocha-phantomjs --reporter spec file:////home/Projects/bem-project/specs/pc/platform/platform.html
     /bin/sh: 1: /home/Projects/bem-project/node_modules/enb-bem-specs/node_modules/.bin/mocha-phantomjs: not found
     ]
       killed: false,
       code: 127,
       signal: null,
       cmd: '/bin/sh -c /home/Projects/bem-project/node_modules/enb-bem-specs/node_modules/.bin/mocha-phantomjs --reporter spec file:////home/Projects/bem-project/specs/pc/platform/platform.html' },
    _status: 3,
    _fulfilledCallbacks: undefined,
    _rejectedCallbacks: undefined,
    _progressCallbacks: undefined },

 //.....
 ]

Ошибки то надо выводить! А то сидишь мучаешься.

В довесок напомню, что у многих есть BH, и надо бы уже давно принять МР: https://github.com/enb-bem/enb-bem-specs/pull/41

Добре!

Может кто уже реализовывал свой enb-bem-spec с преферансом и поэтессами? Да так, чтобы запускать его не с PhantomJS а с Karma? Но помодульно!

Есть проект, в common.blocks скопилось уже довольно большое количество блоков. Каким образом можно все это распределить на группы, чтобы в последствии удобнее ориентироваться. На ум только приходит создавать уровни переопределения.

Подскажите пожалуйста как круто сделать сборку, чтоб передать верстку. Dist, в котором будут сложены изображения, заменятся пути и будет красиво отформатированный HTML.

Что нужно установить? Что дописать? Какие команды запустить?

подскажите пожалуйста в чем ошибка

код:

    var bemtreeTemplate = fs.readFileSync(path.join('.',pathToBundle, 'index.bemtree.js'), 'utf-8');
    var context = vm.createContext({
        console: console,
        require: require,
        Vow: vow
    });
    vm.runInContext(bemtreeTemplate, context);

ошибка:

node ./desktop.bundles/index/index.node.js
evalmachine.<anonymous>:85
       if('onreadystatechange' in doc.createElement('script')) { // ie6-ie8
                                      ^

TypeError: Cannot read property 'createElement' of undefined
    at evalmachine.<anonymous>:85:39
    at evalmachine.<anonymous>:104:7
    at Object.__vow_init (evalmachine.<anonymous>:1331:3)
    at buildBemXjst (evalmachine.<anonymous>:1335:12)
    at evalmachine.<anonymous>:1603:25
    at evalmachine.<anonymous>:1605:3
    at Object.exports.runInContext (vm.js:44:17)
    at /home/rustam/work/newkent/desktop.blocks/server/server.node.js:18:5
    at pendingRequires.push.cb (/home/rustam/work/newkent/desktop.bundles/index/index.node.js:88:32)
    at onDeclResolved (/home/rustam/work/newkent/desktop.bundles/index/index.node.js:175:29)

Привет. Как запускать тесты только со своего уровня библиотеки?

Получается так что для наших тестов нужны шаблоны и js из bem-core, bem-comprnents. Соответственно эти уровни есть в конфиге для тестов. Сейчас как минимум в консоль валятся репорты со всех уровней.

Второй вопрос. Сейчас некоторые тесты валятся, но эти тесты валятся если мы запускаем enb make specs со своего уровня библиотеки. если запускать внутри либ то все проходят нормально. Вопрос — как дебажить такое поведение?

Сижу изучаю, просмотрел несколько видео, прочел статьи сверстал пару страниц по туториалам, сверстал свою страницу через BEM, но теперь встал вопрос как эту вёрстку теперь собрать? Вот чтоб в папочку сложились html, css, js, картинки и оставалось упаковать в архив и отправить?

Сижу изучаю, просмотрел несколько видео, прочел статьи сверстал пару страниц по туториалам, сверстал свою страницу через BEM, но теперь встал вопрос как эту вёрстку теперь собрать? Вот чтоб в папочку сложились html, css, js, картинки и оставалось упаковать в архив и отправить?

Разбирая проблему сбора тестов под специфику проекта Внезапно захотелось получить возможность к сборке enb-сборщиком указать просто список блоков c с которых и надо начать сборку.

Например как-то так:

             nodeConfig.addTechs([
                    [provide, {
                        source: ['messages', 'b-level', 'm-trevel'],
                        target: 'app.bemdecl.js'
                    }]
                ]);

Всем привет. Стоит такая задача. Выделить общий css который используют все бандлы. То есть те блоки которые лежат в common.blocks необходимо выделить в common.css, а блоки которые лежат в бандлах выделить в отдельный для каждой страницы css например: index.css. Скажите пожалуйста как правильно это сделать

Всем привет подскажите пожалуйста, в итоговом css путь к картинке меняется на относительный путь к блоку. Например: (../../common.blocks/icon/_image/i/cart.png). В .borshik прописано "i/**": "/images/". В make.js enb следущее [borschikTech, { sourceTarget: '?.css', destTarget: '?.min.css', tech: 'cleancss', freeze: true, minify: isProd }]. Я так понимаю борщик не работает, а пути меняет сам enb?! Как это исправить?