Giter Club home page Giter Club logo

bem-tools's Issues

Implement arch actualization mechanizm in node classes

Ноды (LevelNode, BundlesLevelNode, BundleNode) должны актуализировать состояние arch во время своего выполнения. Сейчас эти ноды достраивают граф ровно один раз при первом выполнении.

В нодах должна быть реализована защита от частой перестройки графа (для начала, не чаще чем раз в 5 секунд).
В будущем механизм контроля будет отдан модулю, мониторящему изменения на файловой системе.

bem server: 404 error in case of "request to build absent node"

  1. Клонировать https://github.com/bem/bem-bl-test.
  2. Запустить bem server в корне.
  3. В браузере запросить http://localhost:8080/pages/example/example.html

Результат:

  1. В браузере HTTP error 404.
  2. В консоли сервера (реальные абсолютные пути заменил на fake):
trying to access /fake/bem-bl-test/pages/example/example.html
[*] make 'bem-bl' [1]
[=] Log of make 'bem-bl' [1]
git clone --progress git://github.com/bem/bem-bl.git /fake/bem-bl-test/bem-bl
Cloning into /fake/bem-bl-test/bem-bl...

remote: Counting objects: 8834, done.
remote: Compressing objects: 100% (2650/2650), done.
remote: Total 8834 (delta 5765), reused 8785 (delta 5721)
Receiving objects: 100% (8834/8834), 1.58 MiB | 360 KiB/s, done.
Resolving deltas: 100% (5765/5765), done.

cd /fake/bem-bl-test/bem-bl && git checkout master
Already on 'master'

[*] make 'pages*' [1]
[=] Log of make 'pages*' [1]
*** HTTP error: 404, undefined

bem server: hangs during build

Поставить свежий bem server.
Поставить bem-bl-test.
Запустить bem server в bem-bl-test.
Вызвать в браузере сборку http://localhost:8080/pages/example/example.html
Сборка доходит до

[*] make 'pages/example/example.deps.js.meta.js' [6]
[=] Log of make 'pages/example/example.deps.js.meta.js' [6]

после чего виснет.

Incorrect handling of paths on windows

Добрый день, первый раз сталкиваюсь с nodejs поэтому могу что-то не правильно делать.

Поставил node.exe версии 0.6.6 на windows 7 x64, пользуюсь ryppi пакет менеджером. Тестовые проекты для nodejs работают.

Установил bem. Но при обращении к утилите - резальтатов никаких не даёт. Опытным путём (console.log) - выяснил что методы .act() не вызываются никогда.

к примеру в файле bem/lib/commands/create/level.js после строчки "module.exports = function() {" -- console.log(); выполняется, а далее по коду в методе act() -- нет. Запускал с командой bem create level blocks.

Так же не отвечают на запросы все другие команды - даже bem --help ничего не выводит.

Форматирование результирующего HTML

Сейчас выводимый html файл не содержит форматирования.
Хочется иметь возможность получать "красивый" html.
Необходимо для удобного распиливая html на куски, и нормального diffa.

getBuildResults() для legacy-технологий

Нет возможности получить результат билда технологии написанной в legacy-стиле. Это бывает нужно, если новая технология содержит (доопределяет) контент старой технологии.

Ошибка при сборке deps файла.

Симптомы:

Блок А имеет элемент А.а.

Блок А подключен к блоку Б и блоку В.

Блок Б подключен к блоку Г, который подключен к блоку В.

После сборки деклорация об элемент A.а в deps-фале отсутствует, соответственно и в сборке.

Если отсоединить блок А от блока Б или блока В и оставить только в одном из них. То декларация элемента А.а появляется в deps-файле и в сборке.

Все колдовство происходило с js фалами. Других технологий там нет.

Feature request: bem create --force param

%.html: %.bemhtml.js %.css %.js
$(call BEM_CREATE,bem-bl/blocks-desktop/i-bem/bem/techs/html.js)

bem create выдаёт ошибку "File already exists". Спасает "rm $@" в мейк-файле. Но удаление — плохая практика, т.к. новый файл может не собраться.
Хорошо бы иметь ключик --force (-f) для принудительного перезаписывания файла цели в случае успешной генерации.

Пересмотр сборки ie.css технологии

Сейчас ie.css технология собирается так:

@import url(../../bem-bl/blocks-desktop/b-link/_pseudo/b-link_pseudo_yes.ie.css);

Есть мнение, что правильней собирать эту технологию в таком виде:

@import url(../../bem-bl/blocks-desktop/b-link/_pseudo/b-link_pseudo_yes.ie.css);
@import url(../../blocks/b-link/_pseudo/b-link_pseudo_yes.css);
@import url(../../blocks/b-link/_color/b-link_color_red.css);
@import url(../../blocks/b-link/_color/b-link_color_green.css);

ie.css файлы должны подключаются там, где объявлены, а не в конце документа, как это происходит сейчас

ie.css tech has to include non-ie file first

Example:

@import url(index.css);
@import url(../../blocks/i-global/i-global.ie.css);
@import url(../../blocks/i-global/_type/i-global_type_reset.ie.css);
@import url(../../blocks/i-global/_type/i-global_type_simple.ie.css);
@import url(../../blocks/b-head-tabs/b-head-tabs.ie.css);

instead of:

@import url(../../blocks/i-global/i-global.ie.css);
@import url(../../blocks/i-global/_type/i-global_type_reset.ie.css);
@import url(../../blocks/i-global/_type/i-global_type_simple.ie.css);
@import url(../../blocks/b-head-tabs/b-head-tabs.ie.css);

пути GNUMakefile для windows

в файле utils.js есть функция:

exports.isPath = function(str) {
return str.indexOf(PATH.dirSep) !== -1;
};

Она определяет является ли путём строка. Так вот в windows окружении PATH.dirSep == '' , а GNUMakefile все пути заданы с косой чертой '/' и при сборке выскакивают ошибки о не найденых файлах и т.п.

Принимая в качестве разделителя косую черту nodejs нормально её интерпретирует и в винде, поэтому может имеет смысл как-то форсировать именно её при возможности - так скрипты сборки будут кроссплатформеней писаться?

ps чтобы было понятнее вопрос относится к GNUMakefile из bem-method - но детали реализации тут, поэтому и сюда запостил.

Оповещение браузера об изменениях на файловой системе

Если использовать WebSocket (и его аналоги для старых браузеров), то при поднятии bem serverа, можно инклудить на страницу легкий js, который будет подключаться к серверу и ждать от него сообщений о том, что файл технологии обновился и то, что следует обновить страницу или этот файл.
Тогда получится обратный процесс, когда мы меняем что-то на файловой системе, а bem server производит автоматическую сборку всего, что требуется и по окончании обновляет страницу на клиенте.

bem server: Initialize block library targets

Read block libraries config from .bem/lib.js, generate target for each library.

Config can be like this:

exports.getLibraries = function() {

    return {
        'bem-bl': {
            type: 'git',
            url: 'git://github.com/bem/bem-bl.git',
            treeish: 'master'
        }
    }

};

Ошибка в синтаксисе bem-tools /lib/level.js

в объявлении myPath внутри библиотеки bem-tools / lib / level.js
при объявлении переменных закаралась ошибка в виде точки с запятой вместо просто запятой

После make -B в bem-bl-test пустые файлы

Играюсь с БЭМ, сегодня сделал в проекте make -B и что-то пошло не так.
Раньше лечилось обновлением всего связанного с БЭМ. В этот раз не полечилось.

Удалил все что было, поставил обратно. Все равно не полечилось.
После 1-й установки оно поругалось
error: TypeError: Object # has no method 'parse'
После npm update оно перестало ругаться, но результирующие файлы пустые.

Куда копать?
Ниже лог.

dmage@nibbler ~ $ sudo npm-g install bem xjst ometajs
npm WARN [email protected] package.json: bugs['web'] should probably be bugs['url']
/usr/bin/ometajs2js -> /usr/lib/node_modules/ometajs/bin/ometajs2js
/usr/bin/xjst -> /usr/lib/node_modules/xjst/bin/xjst
npm WARN [email protected] package.json: bugs['web'] should probably be bugs['url']
npm WARN [email protected] package.json: bugs['web'] should probably be bugs['url']
/usr/bin/bem -> /usr/lib/node_modules/bem/bin/bem
[email protected] /usr/lib/node_modules/ometajs
[email protected] /usr/lib/node_modules/xjst
[email protected] /usr/lib/node_modules/bem
├── [email protected]
├── [email protected]
└── [email protected]
dmage@nibbler ~ $ git clone https://github.com/bem/bem-bl-test.git
Cloning into bem-bl-test...
cd bem remote: Counting objects: 121, done.
remote: Compressing objects: 100% (79/79), done.
remote: Total 121 (delta 35), reused 106 (delta 20)
Receiving objects: 100% (121/121), 11.91 KiB, done.
Resolving deltas: 100% (35/35), done.
dmage@nibbler ~ $ cd bem-bl-test/
dmage@nibbler ~/bem-bl-test $ make
-- git git://github.com/bem/bem-bl.git bem-bl
Cloning into bem-bl...
remote: Counting objects: 3834, done.
remote: Compressing objects: 100% (1527/1527), done.
remote: Total 3834 (delta 2122), reused 3724 (delta 2012)
Receiving objects: 100% (3834/3834), 758.43 KiB | 307 KiB/s, done.
Resolving deltas: 100% (2122/2122), done.
bem create block -l pages -t bemdecl.js client
bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.bemdecl.js -t deps.js -o pages/client -n client
bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.deps.js -t bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js -o pages/client -n client
error: TypeError: Object # has no method 'parse'
TypeError: Object # has no method 'parse'
at [object Object].bemBuild (/home/dmage/bem-bl-test/bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js:43:29)
at [object Object].build (/usr/lib64/node_modules/bem/lib/tech.js:420:26)
at /usr/lib64/node_modules/bem/lib/commands/build.js:119:22
at Array.forEach (native)
at Cmd. (/usr/lib64/node_modules/bem/lib/commands/build.js:44:32)
at /usr/lib64/node_modules/bem/node_modules/coa/lib/cmd.js:384:22
at _fulfilled (/usr/lib64/node_modules/bem/node_modules/q/q.js:498:32)
at Promise.promiseSend (/usr/lib64/node_modules/bem/node_modules/q/q.js:242:37)
at /usr/lib64/node_modules/bem/node_modules/q/q.js:519:18
at Promise.promiseSend (/usr/lib64/node_modules/bem/node_modules/q/q.js:242:37)
make: *** [pages/client/client.bemhtml.js] Ошибка 1
rm pages/client/client.deps.js pages/client/client.bemdecl.js
dmage@nibbler ~/bem-bl-test $ sudo npm-g update
npm WARN [email protected] package.json: bugs['web'] should probably be bugs['url']
npm WARN [email protected] package.json: bugs['web'] should probably be bugs['url']
npm WARN [email protected] package.json: bugs['web'] should probably be bugs['url']
npm WARN [email protected] package.json: bugs['web'] should probably be bugs['url']
/usr/bin/xjst -> /usr/lib/node_modules/xjst/bin/xjst
[email protected] /usr/lib/node_modules/xjst
├── [email protected]
├── [email protected]
└── [email protected]
dmage@nibbler ~/bem-bl-test $ make -B
-- git git://github.com/bem/bem-bl.git bem-bl
From git://github.com/bem/bem-bl

  • branch master -> FETCH_HEAD
    Already up-to-date.
    bem create block -l pages -t bemdecl.js client
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.bemdecl.js -t deps.js -o pages/client -n client
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.deps.js -t bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js -o pages/client -n client
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.deps.js -t css -o pages/client -n client
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.deps.js -t js -o pages/client -n client
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.deps.js -t ie.css -o pages/client -n client
    bem create block -l pages -t bem-bl/blocks-common/i-bem/bem/techs/html.js client
    bem create block -l pages -t bemdecl.js example
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/example/blocks/ -d pages/example/example.bemdecl.js -t deps.js -o pages/example -n example
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/example/blocks/ -d pages/example/example.deps.js -t bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js -o pages/example -n example
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/example/blocks/ -d pages/example/example.deps.js -t css -o pages/example -n example
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/example/blocks/ -d pages/example/example.deps.js -t js -o pages/example -n example
    bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/example/blocks/ -d pages/example/example.deps.js -t ie.css -o pages/example -n example
    bem create block -l pages -t bem-bl/blocks-common/i-bem/bem/techs/html.js example
    rm pages/example/example.bemdecl.js pages/client/client.deps.js pages/client/client.bemdecl.js pages/example/example.deps.js
    dmage@nibbler ~/bem-bl-test $ cat pages/example/example.html

dmage@nibbler ~/bem-bl-test $ ls -al pages/example/
итого 20
drwxr-xr-x 2 dmage dmage 4096 Ноя 20 00:55 .
drwxr-xr-x 4 dmage dmage 4096 Ноя 20 00:53 ..
-rw-r--r-- 1 dmage dmage 1259 Ноя 20 00:55 example.bemhtml.js
-rw-r--r-- 1 dmage dmage 563 Ноя 20 00:53 example.bemjson.js
-rw-r--r-- 1 dmage dmage 0 Ноя 20 00:55 example.css
-rw-r--r-- 1 dmage dmage 1 Ноя 20 00:55 example.html
-rw-r--r-- 1 dmage dmage 0 Ноя 20 00:55 example.ie.css
-rw-r--r-- 1 dmage dmage 0 Ноя 20 00:55 example.js
dmage@nibbler ~/bem-bl-test $ make pages/client/client.bemdecl.js
bem create block -l pages -t bemdecl.js client
dmage@nibbler ~/bem-bl-test $ cat pages/client/client.bemdecl.js
dmage@nibbler ~/bem-bl-test $

Update bem package with .ie.css tech

Sergey, could you please release new version of bem npm package with ie.css tech I have done right now. I will announce it in out Yarushka club with an example in bem-bl-test project which I have already done too.
Thank you!

Комментирование html кода средствами bemjson.

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

{
    block: 'b-test',
    info: true,
    content: 'hello'
}

будет развариваться в
<!-- start b-test -->
<div class='b-test'>
hello
</div>
<!-- end b-test -->

bem server: deal with require() caching of loaded modules

The problem is that require() caches loaded modules, so when we need to reload changes make.js or something we'll get a link to the obsolete cached copy of new and not a new version from disk.

There are some places in code that need to be fixed.

bem server: silent errors in blocks

В нодах проглатываются ошибки, после чего сборка не работает, а в консоли (как make, так и server стектрейсов и вообще сообщений об ошибках нет). Один из примеров: в тело конструктора BundleNode добавить xxx.yyy; и запустить bem make pages/example/example.html на bem-bl-test.
Результат:

[*] make 'bem-bl' [1]
[=] Log of make 'bem-bl' [1]
cd /../bem-bl-test/bem-bl && git pull --progress origin server
Already up-to-date.

From git://github.com/bem/bem-bl
 * branch            server     -> FETCH_HEAD

cd /../bem-bl-test/bem-bl && git checkout server
Already on 'server'

[*] make 'pages*' [1]
** No rule to make target 'pages/example/example.html'

Пустой runner приводит к падению bem

Похоже, последние коммиты bem / apw что-то крепко сломали. Поставленный начисто bem-tools/server падает.

  1. bem server падает по TypeError: Object #<Object> has no method 'findNode, at /../bem-tools/lib/server.js:76:23
  2. bem make падает по TypeError: Object #<Object> has no method 'findAndProcess, at /../bem-tools/lib/commands/make.js:56:22
    Везде гуляет пустой ({}) runner.

Implement arch invalidation mechanism in the bem server

Arch should be built on the first request. The requests coming shortly after the first one should be completed using the existing arch. An invalidation timeout should be defined which sets the time during which the arch is considered being valid. Requests coming during the timout will use existing arch, every such request resets the timeout. When timeout is completed the arch becomes invalid and next server request will lead to the arch being rebuilt.

Под Windows 7 x64 и XP x86 не работает bem-tools

C:\usr\nodejs>bem
C:\usr\nodejs>bem create block b-my-block
C:\usr\nodejs>dir

Directory of C:\usr\nodejs

29.12.2011 13:58

.
29.12.2011 13:58 ..
29.12.2011 13:58 199 bem.cmd
29.12.2011 13:55 5 030 248 node.exe
29.12.2011 13:56 15 698 944 node.pdb
29.12.2011 13:58 node_modules
16.12.2011 18:00 213 npm-g.cmd
16.12.2011 18:00 213 npm.cmd
16.12.2011 18:00 213 npm_g.cmd
6 File(s) 20 730 030 bytes
3 Dir(s) 8 230 465 536 bytes free

C:\usr\nodejs>bem --help

После ввода команды что-то происходит, но результата нет, как нет никаких сообщений.
Под Debian собрал, всё работает, всё ок.

Проблема в node.exe или bem-tools?

[bug] `bem create level` TypeError: Cannot call method 'shift' of undefined

Пытаюсь создать уровень переопределения с точкой в имени: bem create level level.blocks. Получаю

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
TypeError: Cannot call method 'shift' of undefined
    at Cmd.parse (/usr/lib/node/.npm/bem/0.0.9/package/lib/optparse.js:163:37)
    at Cmd.parse (/usr/lib/node/.npm/bem/0.0.9/package/lib/optparse.js:156:21)
    at Cmd.parse (/usr/lib/node/.npm/bem/0.0.9/package/lib/optparse.js:156:21)
    at Object.main (/usr/lib/node/.npm/bem/0.0.9/package/lib/bem.js:23:10)
    at Object.<anonymous> (/usr/lib/node/.npm/bem/0.0.9/package/bin/bem:3:23)
    at Module._compile (module.js:402:26)
    at Object..js (module.js:408:10)
    at Module.load (module.js:334:31)
    at Function._load (module.js:293:12)
    at Array.<anonymous> (module.js:421:10)

Если передать ключ -C ./то уровень создается.

No manual entry for bem

Не хватает мана для bem-tools, в котором было бы описано всё по использованию. Описание сущностей и как с ними работать.

Проблема с bem build

Беру тестовый проект отсюда - https://github.com/bem/bem-bl-test
Во время сборки вылетает ошибка:

/Users/vizo/Sites/test make
bem create block -l pages -T bemdecl.js client
bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.bemdecl.js -t deps.js -o pages/client -n client
bem build -l bem-bl/blocks-common/ -l bem-bl/blocks-desktop/ -l blocks/ -l pages/client/blocks/ -d pages/client/client.deps.js -t bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js -o pages/client -n client
Error: Cannot find module 'bem/lib/path'
at Function._resolveFilename (module.js:317:11)
at Function._load (module.js:262:25)
at require (module.js:346:19)
at Object. (/Users/vizo/Sites/test/bem-bl/blocks-common/i-bem/bem/techs/bemhtml.js:1:76)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at require (module.js:346:19)
at /usr/lib/node_modules/bem/lib/tech.js:13:20
make: *** [pages/client/client.bemhtml.js] Error 1
rm pages/client/client.deps.js pages/client/client.bemdecl.js

node -v v0.4.11

npm -v 1.0.104

bem -v 0.1.2

bem server: ability to configure and fine tune of build rules

We need an ability to configure (override some points and replace whole logic when needed) and fine tune of default build rules.

Proposed solution.

We add an ability for user to specify his own rules in .bem/make.js for the project (starting build arch) and its levels (blocks and bundles/pages) and in path/to/block-or-bundle/block-or-bundle.make.js for the block or bundle. The result of require() of this file then treated as a second argument to INHERIT(baseNodeClass, requiredObj) (require('inherit')) call. baseNodeClass is a class describing default build rules for particular builded object.

This solution doesn't cover overriding of generic nodes like FileNode, BemCreateNode and BemBuildNode.

bem server: Initialize bundle level targets

Read config from .bem/<something>.js (.bem/levels.js?), look for function-getter or glob variable, generate target for each bundle level present.

Config could be like this:

// regexp?
exports.bundleLevelsRegexp = /bundles.*?/;

// glob pattern?
exports.bundleLevelsGlob = 'bundles* pages*';

// function-getter (overriding default implementation)
exports.getBundleLevels = function() {
    return ['pages', 'widgets'];
};

bem create level -t css blocks: Cannot find module 'bem/lib/techs/default'

/Users/vitaly/sites/project# bem create level -t css blocks

node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'bem/lib/techs/default'
at Function._resolveFilename (module.js:320:11)
at Function._load (module.js:266:25)
at require (module.js:348:19)
at new (/usr/local/lib/node/.npm/bem/0.0.6/package/lib/tech.js:9:16)
at [object Object].createTech (/usr/local/lib/node/.npm/bem/0.0.6/package/lib/context.js:39:12)
at [object Object].getTech (/usr/local/lib/node/.npm/bem/0.0.6/package/lib/context.js:33:38)
at /usr/local/lib/node/.npm/bem/0.0.6/package/lib/commands/create/level.js:75:44
at Array.forEach (native)
at /usr/local/lib/node/.npm/bem/0.0.6/package/lib/commands/create/level.js:74:66
at Array.forEach (native)

/Users/vitaly/sites/project# bem -v
0.0.6

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.