From 424bd90e653450a548403249c80984676f99134f Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Mon, 18 Jul 2016 13:15:36 +0300 Subject: [PATCH 01/38] first commit --- README.md | 262 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 216 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index de26329..e1bb5df 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,239 @@ -bem-walk -======== +# bem-walk -[![NPM Status][npm-img]][npm] -[![Travis Status][test-img]][travis] -[![Windows Status][appveyor-img]][appveyor] -[![Coverage Status][coverage-img]][coveralls] -[![Dependency Status][david-img]][david] +## Что это? -[npm]: https://www.npmjs.org/package/bem-walk -[npm-img]: https://img.shields.io/npm/v/bem-walk.svg +Инструмент обходит файловую структуру БЭМ-проекта и возвращает информацию о найденных файлах. -[travis]: https://travis-ci.org/bem-sdk/bem-walk -[test-img]: https://img.shields.io/travis/bem-sdk/bem-walk.svg?label=tests +## Требования к установке -[appveyor]: https://ci.appveyor.com/project/blond/bem-walk -[appveyor-img]: http://img.shields.io/appveyor/ci/blond/bem-walk.svg?style=flat&label=windows +Node.js 4.0+ -[coveralls]: https://coveralls.io/r/bem-sdk/bem-walk -[coverage-img]: https://img.shields.io/coveralls/bem-sdk/bem-walk.svg +## Установка -[david]: https://david-dm.org/bem-sdk/bem-walk -[david-img]: http://img.shields.io/david/bem-sdk/bem-walk.svg?style=flat +``` +$ npm install --save bem-walk +``` + +## Быстрый старт + +```js +var walk = require('bem-walk'), + config = { + // уровни проекта + levels: { + 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'common.blocks': { naming: 'origin' } + } + }, + files = []; + +var stream = walk([ + 'libs/bem-core/common.blocks', + 'common.blocks' +], config); + +stream.on('data', function(file) { + files.push(file); +}); + +stream.on('error', function(err) { + console.log(err); +}); + +stream.on('end', function() { + console.log(files); +}); +``` + +## Начало работы + +Прежде чем использовать `bem-walk`, необходимо описать уровни файловой системы в объекте `config`: + +```js + var config = { + // cписок уровней + levels: { + 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'common.blocks': { scheme: 'nested' } + } + }; +``` +* `naming` — схема именования файлов. +* `scheme` — схема файловой структуры. + +Подробнее: +* [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); +* [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). + +## API + +### walk() + +#### Описание + +`walk(levels, config);` + +#### Входные параметры + +**levels** + +Тип: string[] + +Описание: пути для обхода (абсолютные или относительные). + +```js +[ + 'lib/bem-core/common.blocks', // относительно корня сайта + '//vash-site.com/lib/bem-core/common.blocks' // абсолютный путь +] +``` + +**config** + +Тип: object + +Описание: уровни проекта. + + +**Важно!** В случае, если ранее уровни проекта были описаны в `bem-config`, можно воспользоваться методом `levelMapSync()`, который возвращает аналогичный объект. + +```js +var config = require('bem-config')(); +var levelMap = config.levelMapSync(); +console.log(levelMap); +``` + +#### Возвращает -Install -------- +Поток с возможностью чтения (`stream.Readable`), который имеет следующие события: +##### Событие: 'data' + +`function (file) { }` + +Передаёт обработчику JavaScript-объект, содержащий информацию о найденном файле: + +В JSON-интерфейсе: + +```js +{ + entity: { block: "page" }, + level: "libs/bem-core/desktop.blocks", + tech: "bemhtml", + path: "libs/bem-core/desktop.blocks/page/page.bemhtml.js" +} +``` + +* `entity` — БЭМ-сущность; +* `level` — путь к уровню; +* `tech` — технология реализации; +* `path` — относительный путь к файлу; + +##### Событие: 'end' + +`function () { }` + +Генерируется когда `bem-walk` заканчивает обход всех уровней, описанных в объекте `levels`. + +##### Событие: 'error' + +`function (err) { }` + +Генерируется если при обходе уровней произошла ошибка. + +#### Примеры использования + +##### Группировка + +```js +var walk = require('bem-walk'), + config = { + // уровни проекта + levels: { + 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'common.blocks': { naming: 'origin' } + } + }, + groups = {}; + +var stream = walk([ + 'libs/bem-core/common.blocks', + 'common.blocks' +], config); + +stream.on('data', function(file) { + (groups[file.entity.block] = []).push(file); +}); + +stream.on('error', function(err) { + console.log(err); +}); + +stream.on('end', function() { + console.log(groups); +}); ``` -$ npm install --save-dev bem-walk +##### Фильтрация + +```js +var walk = require('bem-walk'), + config = { + // уровни проекта + levels: { + 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'common.blocks': { naming: 'origin' } + } + }, + files = []; + +var stream = walk([ + 'libs/bem-core/common.blocks', + 'common.blocks' +], config); + +stream.on('data', function(file) { + if (file.entity.block !== 'button') { + files.push(file); + } +}); + +stream.on('error', function(err) { + console.log(err); +}); + +stream.on('end', function() { + console.log(files); +}); ``` -Usage ------ +##### Трансформация ```js var walk = require('bem-walk'), stringify = require('JSONStream').stringify, + through2 = require('through2'), + fs = require('fs'), config = { + // уровни проекта levels: { - 'lib/bem-core/common.blocks': { scheme: 'nested' }, - 'lib/bem-core/desktop.blocks': { scheme: 'nested' }, - 'common.blocks': { scheme: 'flat' }, - 'desktop.blocks': { scheme: 'flat' } + 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'common.blocks': { naming: 'origin' } } - }; + }, + files = []; -walk([ +var stream = walk([ 'libs/bem-core/common.blocks', - 'libs/bem-core/desktop.blocks', - 'common.blocks', - 'desktop.blocks' -], config) - .pipe(stringify()) - .pipe(process.stdout); + 'common.blocks' +], config); -// [{ -// entity: { block: "page" }, -// level: "libs/bem-core/desktop.blocks", -// tech: "bemhtml.js", -// path: "libs/bem-core/desktop.blocks/page/page.bemhtml.js" -// }, -// ... -// ] -``` -License -------- +stream.pipe(through2.obj(function (file, enc, callback) { + file.source = fs.readFileSync(file.path).toString('utf-8'); + this.push(file); -Code and documentation copyright 2014 YANDEX LLC. Code released under the [Mozilla Public License 2.0](LICENSE.txt). + callback(); +})) + .pipe(stringify()) + .pipe(process.stdout); +``` From 6ceab8025fc8a536fccb9af4e76b59985880bbb0 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Mon, 18 Jul 2016 13:23:17 +0300 Subject: [PATCH 02/38] fixes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e1bb5df..89f7f63 100644 --- a/README.md +++ b/README.md @@ -133,13 +133,13 @@ console.log(levelMap); `function () { }` -Генерируется когда `bem-walk` заканчивает обход всех уровней, описанных в объекте `levels`. +Генерируется, когда `bem-walk` заканчивает обход всех уровней, описанных в объекте `levels`. ##### Событие: 'error' `function (err) { }` -Генерируется если при обходе уровней произошла ошибка. +Генерируется, если при обходе уровней произошла ошибка. #### Примеры использования From 28b2cffc80ad66c06265cab0b5f4b64deb489145 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Mon, 18 Jul 2016 13:54:40 +0300 Subject: [PATCH 03/38] deleted function (...){..} --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 89f7f63..5bdffe1 100644 --- a/README.md +++ b/README.md @@ -109,8 +109,6 @@ console.log(levelMap); ##### Событие: 'data' -`function (file) { }` - Передаёт обработчику JavaScript-объект, содержащий информацию о найденном файле: В JSON-интерфейсе: @@ -131,14 +129,10 @@ console.log(levelMap); ##### Событие: 'end' -`function () { }` - Генерируется, когда `bem-walk` заканчивает обход всех уровней, описанных в объекте `levels`. ##### Событие: 'error' -`function (err) { }` - Генерируется, если при обходе уровней произошла ошибка. #### Примеры использования From 06911ffef95213fe4f85f0be216bd230a164cbc5 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 19 Jul 2016 11:00:20 +0300 Subject: [PATCH 04/38] made the changes --- README.md => README.ru.md | 85 +++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 49 deletions(-) rename README.md => README.ru.md (73%) diff --git a/README.md b/README.ru.md similarity index 73% rename from README.md rename to README.ru.md index 5bdffe1..b99a84d 100644 --- a/README.md +++ b/README.ru.md @@ -2,47 +2,51 @@ ## Что это? -Инструмент обходит файловую структуру БЭМ-проекта и возвращает информацию о найденных файлах. - -## Требования к установке - -Node.js 4.0+ +Инструмент обходит файловую систему БЭМ-проекта и возвращает информацию о найденных файлах. ## Установка ``` $ npm install --save bem-walk ``` +Для работы требуется Node.js 4.0+. ## Быстрый старт ```js -var walk = require('bem-walk'), - config = { - // уровни проекта - levels: { - 'lib/bem-core/common.blocks': { naming: 'origin' }, - 'common.blocks': { naming: 'origin' } - } - }, +var сonfig = require('bem-config')(), + walk = require('bem-walk'), + levelMap = сonfig.levelMapSync(), files = []; var stream = walk([ 'libs/bem-core/common.blocks', 'common.blocks' -], config); +], levelMap); -stream.on('data', function(file) { - files.push(file); -}); +stream.on('data', (file) => files.push(file)); -stream.on('error', function(err) { - console.log(err); -}); +stream.on('error', console.error); -stream.on('end', function() { - console.log(files); -}); +stream.on('end', () => console.log(files)); + +``` + +Пример организации файловой структуры БЭМ-проекта: + +```files +common.blocks/ # Уровень проекта +libs/ + bem-core/ # Уровень библиотеки `bem-core` + common.blocks/ +``` + +**Важно!** Приведенный выше пример использует уровни проекта, описанные в `bem-config`. + +```js +var config = require('bem-config')(); +var levelMap = config.levelMapSync(); +console.log(levelMap); ``` ## Начало работы @@ -79,11 +83,11 @@ stream.on('end', function() { Тип: string[] -Описание: пути для обхода (абсолютные или относительные). +Описание: пути для обхода (относительные или абсолютные). ```js [ - 'lib/bem-core/common.blocks', // относительно корня сайта + 'lib/bem-core/common.blocks', // путь относительно каталога, из которого запущен `bem-walk`. '//vash-site.com/lib/bem-core/common.blocks' // абсолютный путь ] ``` @@ -94,15 +98,6 @@ stream.on('end', function() { Описание: уровни проекта. - -**Важно!** В случае, если ранее уровни проекта были описаны в `bem-config`, можно воспользоваться методом `levelMapSync()`, который возвращает аналогичный объект. - -```js -var config = require('bem-config')(); -var levelMap = config.levelMapSync(); -console.log(levelMap); -``` - #### Возвращает Поток с возможностью чтения (`stream.Readable`), который имеет следующие события: @@ -155,18 +150,13 @@ var stream = walk([ 'common.blocks' ], config); -stream.on('data', function(file) { - (groups[file.entity.block] = []).push(file); -}); +stream.on('data', (file) => (groups[file.entity.block] = []).push(file)); -stream.on('error', function(err) { - console.log(err); -}); +stream.on('error', console.error); -stream.on('end', function() { - console.log(groups); -}); +stream.on('end', () => console.log(groups)); ``` + ##### Фильтрация ```js @@ -191,13 +181,10 @@ stream.on('data', function(file) { } }); -stream.on('error', function(err) { - console.log(err); -}); +stream.on('error', console.error); + +stream.on('end', () => console.log(files)); -stream.on('end', function() { - console.log(files); -}); ``` ##### Трансформация From 6153411ce06a1e28b67423636e565e24157549c5 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 19 Jul 2016 11:06:08 +0300 Subject: [PATCH 05/38] Changed the headers --- README.ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.ru.md b/README.ru.md index b99a84d..8fbb7d7 100644 --- a/README.ru.md +++ b/README.ru.md @@ -130,9 +130,9 @@ console.log(levelMap); Генерируется, если при обходе уровней произошла ошибка. -#### Примеры использования +## Примеры использования -##### Группировка +### Группировка ```js var walk = require('bem-walk'), @@ -157,7 +157,7 @@ stream.on('error', console.error); stream.on('end', () => console.log(groups)); ``` -##### Фильтрация +### Фильтрация ```js var walk = require('bem-walk'), @@ -187,7 +187,7 @@ stream.on('end', () => console.log(files)); ``` -##### Трансформация +### Трансформация ```js var walk = require('bem-walk'), From 763a577dc1acb6d7d57939c6e055051034cae210 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Wed, 20 Jul 2016 17:00:10 +0300 Subject: [PATCH 06/38] changed info about URL --- README.ru.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.ru.md b/README.ru.md index 8fbb7d7..4ee6091 100644 --- a/README.ru.md +++ b/README.ru.md @@ -83,15 +83,22 @@ console.log(levelMap); Тип: string[] -Описание: пути для обхода (относительные или абсолютные). +Описание: пути для обхода. ```js [ - 'lib/bem-core/common.blocks', // путь относительно каталога, из которого запущен `bem-walk`. - '//vash-site.com/lib/bem-core/common.blocks' // абсолютный путь + 'lib/bem-core/common.blocks', + 'common.blocks' ] ``` +Можно использовать абсолютный URL, например, так: +```js +[ + '//www.cosmofarm.ru/lib/bem-core/common.blocks', + '//www.cosmofarm.ru/common.blocks' +] +``` **config** Тип: object From 33c45a4c7c68bdb89dd5bdcc9c7dd7e6e0e415c6 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Wed, 27 Jul 2016 10:56:58 +0300 Subject: [PATCH 07/38] corrected usage --- README.ru.md | 64 +++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/README.ru.md b/README.ru.md index 4ee6091..28588f7 100644 --- a/README.ru.md +++ b/README.ru.md @@ -13,26 +13,7 @@ $ npm install --save bem-walk ## Быстрый старт -```js -var сonfig = require('bem-config')(), - walk = require('bem-walk'), - levelMap = сonfig.levelMapSync(), - files = []; - -var stream = walk([ - 'libs/bem-core/common.blocks', - 'common.blocks' -], levelMap); - -stream.on('data', (file) => files.push(file)); - -stream.on('error', console.error); - -stream.on('end', () => console.log(files)); - -``` - -Пример организации файловой структуры БЭМ-проекта: +Пример файловой системы БЭМ-проекта: ```files common.blocks/ # Уровень проекта @@ -41,16 +22,6 @@ libs/ common.blocks/ ``` -**Важно!** Приведенный выше пример использует уровни проекта, описанные в `bem-config`. - -```js -var config = require('bem-config')(); -var levelMap = config.levelMapSync(); -console.log(levelMap); -``` - -## Начало работы - Прежде чем использовать `bem-walk`, необходимо описать уровни файловой системы в объекте `config`: ```js @@ -69,6 +40,37 @@ console.log(levelMap); * [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); * [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). +```js +var walk = require('bem-walk'), + config = { + // уровни проекта + levels: { + 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'common.blocks': { naming: 'origin' } + } + }, + files = []; + +var stream = walk([ + 'libs/bem-core/common.blocks', + 'common.blocks' +], config); + +stream.on('data', file => files.push(file)); + +stream.on('error', console.error); + +stream.on('end', () => console.log(files)); +``` + +**Важно!** Описывать все уровни проекта вручную необязательно, можно воспользоваться пакетом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). + +```js +var config = require('bem-config')(); +var levelMap = config.levelMapSync(); +console.log(levelMap); +``` + ## API ### walk() @@ -157,7 +159,7 @@ var stream = walk([ 'common.blocks' ], config); -stream.on('data', (file) => (groups[file.entity.block] = []).push(file)); +stream.on('data', file => (groups[file.entity.block] = []).push(file)); stream.on('error', console.error); From b6f74214a99cb8b2f6044249f4cb5ddd795985fe Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Wed, 27 Jul 2016 11:00:05 +0300 Subject: [PATCH 08/38] corrected example of transformation --- README.ru.md | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/README.ru.md b/README.ru.md index 28588f7..b1d814d 100644 --- a/README.ru.md +++ b/README.ru.md @@ -25,13 +25,13 @@ libs/ Прежде чем использовать `bem-walk`, необходимо описать уровни файловой системы в объекте `config`: ```js - var config = { - // cписок уровней - levels: { - 'lib/bem-core/common.blocks': { naming: 'origin' }, - 'common.blocks': { scheme: 'nested' } - } - }; +var config = { + // cписок уровней + levels: { + 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'common.blocks': { scheme: 'nested' } + } +}; ``` * `naming` — схема именования файлов. * `scheme` — схема файловой структуры. @@ -40,6 +40,7 @@ libs/ * [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); * [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). + ```js var walk = require('bem-walk'), config = { @@ -87,18 +88,20 @@ console.log(levelMap); Описание: пути для обхода. +Путь относительно рабочего каталога: + ```js [ 'lib/bem-core/common.blocks', 'common.blocks' ] ``` -Можно использовать абсолютный URL, например, так: +Может быть указан абсолютный путь, например, так: ```js [ - '//www.cosmofarm.ru/lib/bem-core/common.blocks', - '//www.cosmofarm.ru/common.blocks' + '/path/to/project/lib/bem-core/common.blocks', + '/path/to/project/common.blocks' ] ``` **config** @@ -217,8 +220,8 @@ var stream = walk([ 'common.blocks' ], config); - stream.pipe(through2.obj(function (file, enc, callback) { + // Создание свойства source объекта file file.source = fs.readFileSync(file.path).toString('utf-8'); this.push(file); From 07f33cf623455ba9218580dc8e387f2266631d69 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Thu, 28 Jul 2016 16:15:37 +0300 Subject: [PATCH 09/38] Made corrections --- README.ru.md | 39 ++++++++++++++------------------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/README.ru.md b/README.ru.md index b1d814d..f23e008 100644 --- a/README.ru.md +++ b/README.ru.md @@ -22,24 +22,7 @@ libs/ common.blocks/ ``` -Прежде чем использовать `bem-walk`, необходимо описать уровни файловой системы в объекте `config`: - -```js -var config = { - // cписок уровней - levels: { - 'lib/bem-core/common.blocks': { naming: 'origin' }, - 'common.blocks': { scheme: 'nested' } - } -}; -``` -* `naming` — схема именования файлов. -* `scheme` — схема файловой структуры. - -Подробнее: -* [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); -* [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). - +Прежде чем использовать `bem-walk`, необходимо описать уровни файловой системы в объекте `config`. ```js var walk = require('bem-walk'), @@ -64,7 +47,14 @@ stream.on('error', console.error); stream.on('end', () => console.log(files)); ``` -**Важно!** Описывать все уровни проекта вручную необязательно, можно воспользоваться пакетом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). +* `naming` — схема именования файлов; +* `scheme` — схема файловой структуры. + +Подробнее: +* [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); +* [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). + +**Важно!** Также уровни проекта можно описать с помощью пакета [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). ```js var config = require('bem-config')(); @@ -122,17 +112,17 @@ console.log(levelMap); ```js { - entity: { block: "page" }, - level: "libs/bem-core/desktop.blocks", - tech: "bemhtml", - path: "libs/bem-core/desktop.blocks/page/page.bemhtml.js" + "entity": { "block": "page" }, + "level": "libs/bem-core/desktop.blocks", + "tech": "bemhtml", + "path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js" } ``` * `entity` — БЭМ-сущность; * `level` — путь к уровню; * `tech` — технология реализации; -* `path` — относительный путь к файлу; +* `path` — относительный путь к файлу. ##### Событие: 'end' @@ -196,7 +186,6 @@ stream.on('data', function(file) { stream.on('error', console.error); stream.on('end', () => console.log(files)); - ``` ### Трансформация From 7a78fe8ce724229d9f4df54c06db06c71fa8d93a Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Wed, 10 Aug 2016 18:12:41 +0300 Subject: [PATCH 10/38] corrections from Yura - part 1 --- README.ru.md | 117 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 84 insertions(+), 33 deletions(-) diff --git a/README.ru.md b/README.ru.md index f23e008..961492f 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,28 +1,93 @@ # bem-walk -## Что это? +Инструмент, позволяющий обойти файловую систему БЭМ-проекта и получить информацию о найденных файлах. -Инструмент обходит файловую систему БЭМ-проекта и возвращает информацию о найденных файлах. +## Быстрый старт -## Установка +### Шаг 1. Установите bem-walk ``` $ npm install --save bem-walk ``` + Для работы требуется Node.js 4.0+. -## Быстрый старт +### Шаг 2. Подключите bem-walk + +Прежде чем использовать `bem-walk`, необходимо создать JavaScript-файл и добавить строку следующего вида: + +```js +var walk = require('bem-walk'); +``` + +### Шаг 3. Опишите уровни файловой системы + +Опишите уровни файловой системы проекта в объекте `config`. + +```js +var config = { + // уровни проекта + levels: { + 'lib/bem-core/common.blocks': { naming: 'origin' }, // `naming` — схема именования файлов + 'common.blocks': { sheme: 'nested' } // `scheme` — схема файловой структуры + } +}; +``` + +**Примечание** В примере скрипта указаны используемые схемы именования файлов и файловой структуры проекта. + +Подробнее: +* [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); +* [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). + +**Примечание** Уровни проекта также можно описать с помощью пакета [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). + +```js +var config = require('bem-config')(); +var levelMap = config.levelMapSync(); +``` + +### Шаг 4. Опишите пути для обхода + +Возможные варианты: + +* относительно корневого каталога + + ```js + var levels = [ + 'libs/bem-core/common.blocks', + 'common.blocks' + ]; + ``` -Пример файловой системы БЭМ-проекта: +* абсолютные -```files -common.blocks/ # Уровень проекта -libs/ - bem-core/ # Уровень библиотеки `bem-core` - common.blocks/ + ```js + var levels = [ + '/path/to/project/lib/bem-core/common.blocks', + '/path/to/project/common.blocks' + ]; + ``` + +### Шаг 5. Получите информацию о найденных файлах + +Передайте методу walk() объекты `levels` и `config`. + +```js +var files = []; + +var stream = walk(levels, config); + +stream.on('data', file => files.push(file)); // добавляем информацию о найденном файле в конец массива files + +stream.on('error', console.error); + +stream.on('end', () => console.log(files)); ``` -Прежде чем использовать `bem-walk`, необходимо описать уровни файловой системы в объекте `config`. +### Результат + +Полный текст примера: ```js var walk = require('bem-walk'), @@ -33,12 +98,13 @@ var walk = require('bem-walk'), 'common.blocks': { naming: 'origin' } } }, + levels = [ + 'libs/bem-core/common.blocks', + 'common.blocks' + ], files = []; -var stream = walk([ - 'libs/bem-core/common.blocks', - 'common.blocks' -], config); +var stream = walk(levels, config); stream.on('data', file => files.push(file)); @@ -47,21 +113,6 @@ stream.on('error', console.error); stream.on('end', () => console.log(files)); ``` -* `naming` — схема именования файлов; -* `scheme` — схема файловой структуры. - -Подробнее: -* [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); -* [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). - -**Важно!** Также уровни проекта можно описать с помощью пакета [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). - -```js -var config = require('bem-config')(); -var levelMap = config.levelMapSync(); -console.log(levelMap); -``` - ## API ### walk() @@ -78,7 +129,7 @@ console.log(levelMap); Описание: пути для обхода. -Путь относительно рабочего каталога: +Путь относительно корневого каталога: ```js [ @@ -106,7 +157,7 @@ console.log(levelMap); ##### Событие: 'data' -Передаёт обработчику JavaScript-объект, содержащий информацию о найденном файле: +Передает обработчику JavaScript-объект, содержащий информацию о найденном файле: В JSON-интерфейсе: @@ -164,7 +215,7 @@ stream.on('end', () => console.log(groups)); ```js var walk = require('bem-walk'), config = { - // уровни проекта + // уровни проекта levels: { 'lib/bem-core/common.blocks': { naming: 'origin' }, 'common.blocks': { naming: 'origin' } From 7456a1da3e1fb95251a704a0796f3ef53e999872 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Mon, 15 Aug 2016 14:24:25 +0300 Subject: [PATCH 11/38] Part 2 --- README.ru.md | 57 ++++++++++++++++++++-------------------------------- 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/README.ru.md b/README.ru.md index 961492f..8a2bbdf 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,6 +1,10 @@ # bem-walk -Инструмент, позволяющий обойти файловую систему БЭМ-проекта и получить информацию о найденных файлах. +Инструмент позволяет обойти файловую систему БЭМ-проекта и получить следующую информацию о найденных файлах: + +* тип БЭМ-сущности (Блок, Элемент, Модификатор); +* технология реализации; +* расположение на файловой системе. ## Быстрый старт @@ -28,19 +32,23 @@ var walk = require('bem-walk'); var config = { // уровни проекта levels: { - 'lib/bem-core/common.blocks': { naming: 'origin' }, // `naming` — схема именования файлов - 'common.blocks': { sheme: 'nested' } // `scheme` — схема файловой структуры + 'lib/bem-core/common.blocks': { naming: 'two-dashes' }, // `naming` — схема именования файлов + 'common.blocks': { sheme: 'nested' } // `scheme` — схема файловой системы } }; ``` -**Примечание** В примере скрипта указаны используемые схемы именования файлов и файловой структуры проекта. +**Примечание** Для каждого описываемого уровня указывается используемая схема именования файлов или схема файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях по их именам или по схеме организации файловой системы на данном уровне. + +Если при описании уровня схема не указана, используются: +* схема именования файлов `origin`; +* схема файловой системы `nested`. Подробнее: * [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); * [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). -**Примечание** Уровни проекта также можно описать с помощью пакета [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). +**Примечание** Для того чтобы не определять уровни проекта вручную, воспользуйтесь инструментом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). ```js var config = require('bem-config')(); @@ -117,47 +125,26 @@ stream.on('end', () => console.log(files)); ### walk() +Обходит директории описанные в параметре `levels` и возвращает поток `stream.Readable`. + #### Описание `walk(levels, config);` #### Входные параметры -**levels** - -Тип: string[] - -Описание: пути для обхода. - -Путь относительно корневого каталога: - -```js -[ - 'lib/bem-core/common.blocks', - 'common.blocks' -] -``` -Может быть указан абсолютный путь, например, так: - -```js -[ - '/path/to/project/lib/bem-core/common.blocks', - '/path/to/project/common.blocks' -] -``` -**config** - -Тип: object - -Описание: уровни проекта. +| Параметр | Тип | Описание | +|----------|-----|----------| +|**levels**|`string[]`|Пути для обхода| +|**config**|`object`|Уровни проекта| -#### Возвращает +#### Выходные данные -Поток с возможностью чтения (`stream.Readable`), который имеет следующие события: +Метод `walk()` возвращает поток с возможностью чтения (`stream.Readable`), который имеет следующие события: ##### Событие: 'data' -Передает обработчику JavaScript-объект, содержащий информацию о найденном файле: +Передает обработчику JavaScript-объект, содержащий информацию о найденном файле. В JSON-интерфейсе: From f923a10ce6a655b423fe7a16c5df5388c54c5a57 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Mon, 15 Aug 2016 14:33:23 +0300 Subject: [PATCH 12/38] returned badges --- README.ru.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.ru.md b/README.ru.md index 8a2bbdf..35539d1 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,5 +1,26 @@ # bem-walk +[![NPM Status][npm-img]][npm] +[![Travis Status][test-img]][travis] +[![Windows Status][appveyor-img]][appveyor] +[![Coverage Status][coverage-img]][coveralls] +[![Dependency Status][david-img]][david] + +[npm]: https://www.npmjs.org/package/bem-walk +[npm-img]: https://img.shields.io/npm/v/bem-walk.svg + +[travis]: https://travis-ci.org/bem-sdk/bem-walk +[test-img]: https://img.shields.io/travis/bem-sdk/bem-walk.svg?label=tests + +[appveyor]: https://ci.appveyor.com/project/blond/bem-walk +[appveyor-img]: http://img.shields.io/appveyor/ci/blond/bem-walk.svg?style=flat&label=windows + +[coveralls]: https://coveralls.io/r/bem-sdk/bem-walk +[coverage-img]: https://img.shields.io/coveralls/bem-sdk/bem-walk.svg + +[david]: https://david-dm.org/bem-sdk/bem-walk +[david-img]: http://img.shields.io/david/bem-sdk/bem-walk.svg?style=flat + Инструмент позволяет обойти файловую систему БЭМ-проекта и получить следующую информацию о найденных файлах: * тип БЭМ-сущности (Блок, Элемент, Модификатор); From 4d33688073781ae8d8c2ec049e25663dba1b5cce Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Mon, 15 Aug 2016 16:06:36 +0300 Subject: [PATCH 13/38] added info about event data --- README.ru.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.ru.md b/README.ru.md index 35539d1..d126353 100644 --- a/README.ru.md +++ b/README.ru.md @@ -80,7 +80,7 @@ var levelMap = config.levelMapSync(); Возможные варианты: -* относительно корневого каталога +* относительно корневого каталога; ```js var levels = [ @@ -89,7 +89,7 @@ var levelMap = config.levelMapSync(); ]; ``` -* абсолютные +* абсолютные. ```js var levels = [ @@ -165,9 +165,9 @@ stream.on('end', () => console.log(files)); ##### Событие: 'data' -Передает обработчику JavaScript-объект, содержащий информацию о найденном файле. +Передает обработчику JavaScript-объект, содержащий информацию о найденном файле. В разделе рассмотрен JSON-интерфейс, включающий все элементы, которые могут войти в ответ метода walk. Объекты и ключи приведены с примерами значений. -В JSON-интерфейсе: +**Пример** ```js { From 12580c743214e424cc07c01467c65350a40828ae Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Mon, 15 Aug 2016 17:33:04 +0300 Subject: [PATCH 14/38] deleted steps --- README.ru.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.ru.md b/README.ru.md index d126353..4842e42 100644 --- a/README.ru.md +++ b/README.ru.md @@ -29,7 +29,7 @@ ## Быстрый старт -### Шаг 1. Установите bem-walk +### Установите bem-walk ``` $ npm install --save bem-walk @@ -37,7 +37,7 @@ $ npm install --save bem-walk Для работы требуется Node.js 4.0+. -### Шаг 2. Подключите bem-walk +### Подключите bem-walk Прежде чем использовать `bem-walk`, необходимо создать JavaScript-файл и добавить строку следующего вида: @@ -45,7 +45,7 @@ $ npm install --save bem-walk var walk = require('bem-walk'); ``` -### Шаг 3. Опишите уровни файловой системы +### Опишите уровни файловой системы Опишите уровни файловой системы проекта в объекте `config`. @@ -76,7 +76,7 @@ var config = require('bem-config')(); var levelMap = config.levelMapSync(); ``` -### Шаг 4. Опишите пути для обхода +### Опишите пути для обхода Возможные варианты: @@ -98,7 +98,7 @@ var levelMap = config.levelMapSync(); ]; ``` -### Шаг 5. Получите информацию о найденных файлах +### Получите информацию о найденных файлах Передайте методу walk() объекты `levels` и `config`. From 9ad3c3f216de87274727b665f735007e1ac59de7 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 16 Aug 2016 11:29:42 +0300 Subject: [PATCH 15/38] changed quick-start --- README.ru.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.ru.md b/README.ru.md index 4842e42..2f1fd7f 100644 --- a/README.ru.md +++ b/README.ru.md @@ -59,9 +59,9 @@ var config = { }; ``` -**Примечание** Для каждого описываемого уровня указывается используемая схема именования файлов или схема файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях по их именам или по схеме организации файловой системы на данном уровне. +**Примечание** Для каждого описываемого уровня указывается используемая схема именования файлов или схема организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или именам файлов и директорий. -Если при описании уровня схема не указана, используются: +Если при описании уровня схема не указана, по умолчанию используется: * схема именования файлов `origin`; * схема файловой системы `nested`. @@ -78,9 +78,11 @@ var levelMap = config.levelMapSync(); ### Опишите пути для обхода +Укажите пути для обхода в объекте `levels`. + Возможные варианты: -* относительно корневого каталога; +* относительно корневого каталога ```js var levels = [ @@ -89,7 +91,7 @@ var levelMap = config.levelMapSync(); ]; ``` -* абсолютные. +* абсолютные ```js var levels = [ @@ -100,7 +102,7 @@ var levelMap = config.levelMapSync(); ### Получите информацию о найденных файлах -Передайте методу walk() объекты `levels` и `config`. +Передайте методу walk() объекты `levels` и `config`. Если запрос был обработан без ошибок, генрируется событие `data` и возвращается JavaScript-объект с информацией о найденом файле. Если запрос вызвал ошибку, возвращается объект `error`, содержащий описание ошибки. ```js var files = []; @@ -144,7 +146,7 @@ stream.on('end', () => console.log(files)); ## API -### walk() +### Метод walk Обходит директории описанные в параметре `levels` и возвращает поток `stream.Readable`. @@ -179,7 +181,7 @@ stream.on('end', () => console.log(files)); ``` * `entity` — БЭМ-сущность; -* `level` — путь к уровню; +* `level` — путь к директории; * `tech` — технология реализации; * `path` — относительный путь к файлу. @@ -193,6 +195,8 @@ stream.on('end', () => console.log(files)); ## Примеры использования +Типичные задачи, решаемые с полученными JavaScript-объектами — группировка, фильтрация, трансформация уже имеющихся данных. + ### Группировка ```js From 491ae23d09eab6bc98935754360509d00ec2a5a7 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 16 Aug 2016 11:35:41 +0300 Subject: [PATCH 16/38] added punctuations --- README.ru.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.ru.md b/README.ru.md index 2f1fd7f..dd5e12e 100644 --- a/README.ru.md +++ b/README.ru.md @@ -59,7 +59,7 @@ var config = { }; ``` -**Примечание** Для каждого описываемого уровня указывается используемая схема именования файлов или схема организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или именам файлов и директорий. +**Примечание** Для каждого описываемого уровня указывается используемая схема именования файлов или схема организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. Если при описании уровня схема не указана, по умолчанию используется: * схема именования файлов `origin`; @@ -82,7 +82,7 @@ var levelMap = config.levelMapSync(); Возможные варианты: -* относительно корневого каталога +* относительно корневого каталога; ```js var levels = [ @@ -91,7 +91,7 @@ var levelMap = config.levelMapSync(); ]; ``` -* абсолютные +* абсолютные. ```js var levels = [ From d9069debf0356b54830dd1127587a00fab143cd9 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 16 Aug 2016 11:48:16 +0300 Subject: [PATCH 17/38] added links to Node.js documentation --- README.ru.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.ru.md b/README.ru.md index dd5e12e..37ad306 100644 --- a/README.ru.md +++ b/README.ru.md @@ -102,7 +102,7 @@ var levelMap = config.levelMapSync(); ### Получите информацию о найденных файлах -Передайте методу walk() объекты `levels` и `config`. Если запрос был обработан без ошибок, генрируется событие `data` и возвращается JavaScript-объект с информацией о найденом файле. Если запрос вызвал ошибку, возвращается объект `error`, содержащий описание ошибки. +Передайте методу walk() объекты `levels` и `config`. Если запрос был обработан без ошибок, генерируется событие `data` и возвращается JavaScript-объект с информацией о найденом файле. Если запрос вызвал ошибку, возвращается объект `error`, содержащий описание ошибки. ```js var files = []; @@ -148,7 +148,7 @@ stream.on('end', () => console.log(files)); ### Метод walk -Обходит директории описанные в параметре `levels` и возвращает поток `stream.Readable`. +Обходит директории описанные в параметре `levels` и возвращает поток [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable). #### Описание @@ -165,7 +165,7 @@ stream.on('end', () => console.log(files)); Метод `walk()` возвращает поток с возможностью чтения (`stream.Readable`), который имеет следующие события: -##### Событие: 'data' +##### Событие: ['data'](https://nodejs.org/api/stream.html#stream_event_data) Передает обработчику JavaScript-объект, содержащий информацию о найденном файле. В разделе рассмотрен JSON-интерфейс, включающий все элементы, которые могут войти в ответ метода walk. Объекты и ключи приведены с примерами значений. @@ -185,11 +185,11 @@ stream.on('end', () => console.log(files)); * `tech` — технология реализации; * `path` — относительный путь к файлу. -##### Событие: 'end' +##### Событие: ['end'](https://nodejs.org/api/stream.html#stream_event_end) Генерируется, когда `bem-walk` заканчивает обход всех уровней, описанных в объекте `levels`. -##### Событие: 'error' +##### Событие: ['error'](https://nodejs.org/api/stream.html#stream_event_error_1) Генерируется, если при обходе уровней произошла ошибка. From 16ecc2501ec301855922bdd781d7f1f90f36819b Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Wed, 17 Aug 2016 11:18:45 +0300 Subject: [PATCH 18/38] fixed a typo --- README.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.md b/README.ru.md index 37ad306..b33af13 100644 --- a/README.ru.md +++ b/README.ru.md @@ -102,7 +102,7 @@ var levelMap = config.levelMapSync(); ### Получите информацию о найденных файлах -Передайте методу walk() объекты `levels` и `config`. Если запрос был обработан без ошибок, генерируется событие `data` и возвращается JavaScript-объект с информацией о найденом файле. Если запрос вызвал ошибку, возвращается объект `error`, содержащий описание ошибки. +Передайте методу walk() объекты `levels` и `config`. Если запрос был обработан без ошибок, генерируется событие `data` и возвращается JavaScript-объект с информацией о найденном файле. Если запрос вызвал ошибку, возвращается объект `error`, содержащий описание ошибки. ```js var files = []; From 1098d151e6503ae8a2bdb05a1f8951fd377d2244 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Wed, 17 Aug 2016 11:22:21 +0300 Subject: [PATCH 19/38] removed brackets --- README.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.md b/README.ru.md index b33af13..d675f72 100644 --- a/README.ru.md +++ b/README.ru.md @@ -163,7 +163,7 @@ stream.on('end', () => console.log(files)); #### Выходные данные -Метод `walk()` возвращает поток с возможностью чтения (`stream.Readable`), который имеет следующие события: +Метод `walk` возвращает поток с возможностью чтения (`stream.Readable`), который имеет следующие события: ##### Событие: ['data'](https://nodejs.org/api/stream.html#stream_event_data) From d10c46a99eef14ee126134a9ecef9f5719a93e99 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Wed, 17 Aug 2016 15:13:27 +0300 Subject: [PATCH 20/38] glvrd --- README.ru.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.ru.md b/README.ru.md index d675f72..b05474f 100644 --- a/README.ru.md +++ b/README.ru.md @@ -39,7 +39,7 @@ $ npm install --save bem-walk ### Подключите bem-walk -Прежде чем использовать `bem-walk`, необходимо создать JavaScript-файл и добавить строку следующего вида: +Прежде чем использовать `bem-walk`, создайте JavaScript-файл и добавьте строку следующего вида: ```js var walk = require('bem-walk'); @@ -59,7 +59,7 @@ var config = { }; ``` -**Примечание** Для каждого описываемого уровня указывается используемая схема именования файлов или схема организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. +**Примечание** Для каждого уровня указывается используемая схема именования файлов или схема организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. Если при описании уровня схема не указана, по умолчанию используется: * схема именования файлов `origin`; @@ -69,7 +69,7 @@ var config = { * [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); * [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). -**Примечание** Для того чтобы не определять уровни проекта вручную, воспользуйтесь инструментом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). +**Примечание** Чтобы не определять уровни проекта вручную, воспользуйтесь инструментом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). ```js var config = require('bem-config')(); @@ -102,7 +102,7 @@ var levelMap = config.levelMapSync(); ### Получите информацию о найденных файлах -Передайте методу walk() объекты `levels` и `config`. Если запрос был обработан без ошибок, генерируется событие `data` и возвращается JavaScript-объект с информацией о найденном файле. Если запрос вызвал ошибку, возвращается объект `error`, содержащий описание ошибки. +Передайте методу walk() объекты `levels` и `config`. Если запрос обработан без ошибок, генерируется событие `data` и возвращается JavaScript-объект с информацией о найденном файле. Если запрос вызвал ошибку, возвращается объект `error`, содержащий описание ошибки. ```js var files = []; @@ -167,7 +167,7 @@ stream.on('end', () => console.log(files)); ##### Событие: ['data'](https://nodejs.org/api/stream.html#stream_event_data) -Передает обработчику JavaScript-объект, содержащий информацию о найденном файле. В разделе рассмотрен JSON-интерфейс, включающий все элементы, которые могут войти в ответ метода walk. Объекты и ключи приведены с примерами значений. +Передает обработчику JavaScript-объект, содержащий информацию о найденном файле. В разделе рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода walk. Объекты и ключи приведены с примерами значений. **Пример** @@ -187,7 +187,7 @@ stream.on('end', () => console.log(files)); ##### Событие: ['end'](https://nodejs.org/api/stream.html#stream_event_end) -Генерируется, когда `bem-walk` заканчивает обход всех уровней, описанных в объекте `levels`. +Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. ##### Событие: ['error'](https://nodejs.org/api/stream.html#stream_event_error_1) From 2670033549a9cc17aff3a5f63cb67afec9ce6b2d Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 23 Aug 2016 14:15:03 +0300 Subject: [PATCH 21/38] second edition from Jura --- README.ru.md | 81 ++++++++++++++++++++++------------------------------ 1 file changed, 34 insertions(+), 47 deletions(-) diff --git a/README.ru.md b/README.ru.md index b05474f..45c09ac 100644 --- a/README.ru.md +++ b/README.ru.md @@ -29,23 +29,23 @@ ## Быстрый старт -### Установите bem-walk +**Примечание** Для работы с `bem-walk` требуется установить Node.js 4.0+. + +### 1. Установите bem-walk ``` $ npm install --save bem-walk ``` -Для работы требуется Node.js 4.0+. - -### Подключите bem-walk +### 2. Подключите bem-walk -Прежде чем использовать `bem-walk`, создайте JavaScript-файл и добавьте строку следующего вида: +Создайте JavaScript-файл с произвольным именем и добавьте строку следующего вида: ```js var walk = require('bem-walk'); ``` -### Опишите уровни файловой системы +### 3. Опишите уровни файловой системы Опишите уровни файловой системы проекта в объекте `config`. @@ -59,9 +59,9 @@ var config = { }; ``` -**Примечание** Для каждого уровня указывается используемая схема именования файлов или схема организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. +**Примечание** Для каждого уровня указывается схема именования файлов или организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. -Если при описании уровня схема не указана, по умолчанию используется: +Если схема не указана, по умолчанию используется: * схема именования файлов `origin`; * схема файловой системы `nested`. @@ -69,20 +69,20 @@ var config = { * [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); * [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). -**Примечание** Чтобы не определять уровни проекта вручную, воспользуйтесь инструментом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). +**Примечание** Чтобы не определять уровни проекта вручную, воспользуйтесь инструментом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). ```js var config = require('bem-config')(); var levelMap = config.levelMapSync(); ``` -### Опишите пути для обхода +### 4. Опишите пути обхода -Укажите пути для обхода в объекте `levels`. +Укажите пути обхода в объекте `levels`. Возможные варианты: -* относительно корневого каталога; +* Относительно корневого каталога. ```js var levels = [ @@ -91,7 +91,7 @@ var levelMap = config.levelMapSync(); ]; ``` -* абсолютные. +* Абсолютные. ```js var levels = [ @@ -100,9 +100,11 @@ var levelMap = config.levelMapSync(); ]; ``` -### Получите информацию о найденных файлах +### 5. Получите информацию о найденных файлах -Передайте методу walk() объекты `levels` и `config`. Если запрос обработан без ошибок, генерируется событие `data` и возвращается JavaScript-объект с информацией о найденном файле. Если запрос вызвал ошибку, возвращается объект `error`, содержащий описание ошибки. +Передайте методу walk() объекты `levels` и `config`. + +Для получения данных о найденных файлах используется поток (stream). Когда порция данных получена, генерируется событие `data` и информация о найденном файле добавляется в массив `files`. При возникновении ошибки `bem-walk` прекращает обработку запроса и возвращает ответ, содержащий идентификатор ошибки и ее описание. Событие `end` наступает при окончании получения данных из потока. ```js var files = []; @@ -116,9 +118,9 @@ stream.on('error', console.error); stream.on('end', () => console.log(files)); ``` -### Результат +**Примечание** [Подробнее о возвращаемых данных](#Событие-data). -Полный текст примера: +В результате выполненных действий полный код JavaScript-файла должен иметь следующий вид: ```js var walk = require('bem-walk'), @@ -148,14 +150,16 @@ stream.on('end', () => console.log(files)); ### Метод walk -Обходит директории описанные в параметре `levels` и возвращает поток [`stream.Readable`](https://nodejs.org/api/stream.html#stream_class_stream_readable). +`walk(levels, config);` #### Описание -`walk(levels, config);` +Обходит директории описанные в параметре `levels` и возвращает поток `stream.Readable`. #### Входные параметры +Требования к поиску определяются параметрами `levels` и `config`. Параметры нельзя передавать в любой последовательности. + | Параметр | Тип | Описание | |----------|-----|----------| |**levels**|`string[]`|Пути для обхода| @@ -163,39 +167,22 @@ stream.on('end', () => console.log(files)); #### Выходные данные -Метод `walk` возвращает поток с возможностью чтения (`stream.Readable`), который имеет следующие события: - -##### Событие: ['data'](https://nodejs.org/api/stream.html#stream_event_data) - -Передает обработчику JavaScript-объект, содержащий информацию о найденном файле. В разделе рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода walk. Объекты и ключи приведены с примерами значений. - -**Пример** - -```js -{ - "entity": { "block": "page" }, - "level": "libs/bem-core/desktop.blocks", - "tech": "bemhtml", - "path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js" -} -``` - -* `entity` — БЭМ-сущность; -* `level` — путь к директории; -* `tech` — технология реализации; -* `path` — относительный путь к файлу. - -##### Событие: ['end'](https://nodejs.org/api/stream.html#stream_event_end) - -Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. +Поток с возможностью чтения (`stream.Readable`), который имеет следующие события: -##### Событие: ['error'](https://nodejs.org/api/stream.html#stream_event_error_1) +| Событие | Описание | +|----------|-----| +|'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}


`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| +| 'error' | Генерируется, если при обходе уровней произошла ошибка. | +| 'end' | Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. | -Генерируется, если при обходе уровней произошла ошибка. +**Примечание** [Полный список событий](https://nodejs.org/api/stream.html#stream_class_stream_readable). ## Примеры использования -Типичные задачи, решаемые с полученными JavaScript-объектами — группировка, фильтрация, трансформация уже имеющихся данных. +Типовые задачи, решаемые с полученными JavaScript-объектами: +* [Группировка](#Группировка). +* [Фильтрация](#Фильтрация). +* [Трансформация имеющихся данных](#Трансформация). ### Группировка From 5eb4100e86b490ca447f20b4d3745c708e328c1f Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 23 Aug 2016 14:22:30 +0300 Subject: [PATCH 22/38] corrected code example --- README.ru.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.ru.md b/README.ru.md index 45c09ac..d523258 100644 --- a/README.ru.md +++ b/README.ru.md @@ -118,7 +118,7 @@ stream.on('error', console.error); stream.on('end', () => console.log(files)); ``` -**Примечание** [Подробнее о возвращаемых данных](#Событие-data). +[Подробнее о возвращаемых данных](#Выходные-данные). В результате выполненных действий полный код JavaScript-файла должен иметь следующий вид: @@ -171,7 +171,7 @@ stream.on('end', () => console.log(files)); | Событие | Описание | |----------|-----| -|'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}


`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| +|'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

```js{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}```

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| | 'error' | Генерируется, если при обходе уровней произошла ошибка. | | 'end' | Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. | From 4acb6ddc12bb0bab30d57b4750f702b205bc5580 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 23 Aug 2016 14:26:15 +0300 Subject: [PATCH 23/38] corrected code example 2 --- README.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.md b/README.ru.md index d523258..cc1188d 100644 --- a/README.ru.md +++ b/README.ru.md @@ -171,7 +171,7 @@ stream.on('end', () => console.log(files)); | Событие | Описание | |----------|-----| -|'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

```js{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}```

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| +|'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| | 'error' | Генерируется, если при обходе уровней произошла ошибка. | | 'end' | Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. | From f006db462d8082b6709772aa74909e403d801f23 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 23 Aug 2016 14:29:22 +0300 Subject: [PATCH 24/38] corrected code 3 --- README.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.md b/README.ru.md index cc1188d..e17992c 100644 --- a/README.ru.md +++ b/README.ru.md @@ -171,7 +171,7 @@ stream.on('end', () => console.log(files)); | Событие | Описание | |----------|-----| -|'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| +|'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| | 'error' | Генерируется, если при обходе уровней произошла ошибка. | | 'end' | Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. | From 87dfd26b4c3deec597777b1282346de84b444c9d Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Tue, 23 Aug 2016 14:56:24 +0300 Subject: [PATCH 25/38] deleted 'for' --- README.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.md b/README.ru.md index e17992c..979cc74 100644 --- a/README.ru.md +++ b/README.ru.md @@ -162,7 +162,7 @@ stream.on('end', () => console.log(files)); | Параметр | Тип | Описание | |----------|-----|----------| -|**levels**|`string[]`|Пути для обхода| +|**levels**|`string[]`|Пути обхода| |**config**|`object`|Уровни проекта| #### Выходные данные From 7bd303f4bbc794038ec81fa0cc6892525a96c2b0 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Wed, 24 Aug 2016 19:24:35 +0300 Subject: [PATCH 26/38] edit from blond@ --- README.ru.md | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/README.ru.md b/README.ru.md index 979cc74..183e0eb 100644 --- a/README.ru.md +++ b/README.ru.md @@ -61,9 +61,10 @@ var config = { **Примечание** Для каждого уровня указывается схема именования файлов или организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. -Если схема не указана, по умолчанию используется: -* схема именования файлов `origin`; -* схема файловой системы `nested`. +| Схема | Значение по умолчанию | Все возможные значения | +|----------|-----|----------| +|`naming` — схема именования файлов.|`origin`| `origin`, `two-dashes`| +|`sheme` — cхема файловой системы.|`nested`|`nested`, `flat`| Подробнее: * [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); @@ -74,6 +75,7 @@ var config = { ```js var config = require('bem-config')(); var levelMap = config.levelMapSync(); +var stream = walk(levels, levelMap); ``` ### 4. Опишите пути обхода @@ -172,7 +174,7 @@ stream.on('end', () => console.log(files)); | Событие | Описание | |----------|-----| |'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| -| 'error' | Генерируется, если при обходе уровней произошла ошибка. | +| 'error' | Генерируется, если при обходе уровней произошла ошибка. Возвращается ответ с описанием ошибки.| | 'end' | Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. | **Примечание** [Полный список событий](https://nodejs.org/api/stream.html#stream_class_stream_readable). @@ -191,14 +193,14 @@ var walk = require('bem-walk'), config = { // уровни проекта levels: { - 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'lib/bem-components/common.blocks': { naming: 'origin' }, 'common.blocks': { naming: 'origin' } } }, groups = {}; var stream = walk([ - 'libs/bem-core/common.blocks', + 'libs/bem-components/common.blocks', 'common.blocks' ], config); @@ -207,6 +209,16 @@ stream.on('data', file => (groups[file.entity.block] = []).push(file)); stream.on('error', console.error); stream.on('end', () => console.log(groups)); + +/* +{ button: + [ { entity: { block: 'button' }, + tech: 'spec.js', + path: 'libs/bem-components/common.blocks/button/_togglable/button_togglable_radio.spec.js', + level: 'libs/bem-components/common.blocks' } ], + ... +} +*/ ``` ### Фильтрация @@ -216,14 +228,14 @@ var walk = require('bem-walk'), config = { // уровни проекта levels: { - 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'lib/bem-components/common.blocks': { naming: 'origin' }, 'common.blocks': { naming: 'origin' } } }, files = []; var stream = walk([ - 'libs/bem-core/common.blocks', + 'libs/bem-components/common.blocks', 'common.blocks' ], config); @@ -236,6 +248,15 @@ stream.on('data', function(file) { stream.on('error', console.error); stream.on('end', () => console.log(files)); + +/* +[{ entity: { block: 'popup', modName: 'target', modVal: true }, + tech: 'js', + path: 'libs/bem-components/common.blocks/popup/_target/popup_target.js', + level: 'libs/bem-components/common.blocks' }, +... +] +*/ ``` ### Трансформация @@ -248,14 +269,14 @@ var walk = require('bem-walk'), config = { // уровни проекта levels: { - 'lib/bem-core/common.blocks': { naming: 'origin' }, + 'lib/bem-components/common.blocks': { naming: 'origin' }, 'common.blocks': { naming: 'origin' } } }, files = []; var stream = walk([ - 'libs/bem-core/common.blocks', + 'libs/bem-components/common.blocks', 'common.blocks' ], config); @@ -268,4 +289,13 @@ stream.pipe(through2.obj(function (file, enc, callback) { })) .pipe(stringify()) .pipe(process.stdout); +/* +[{ entity: { block: 'popup', modName: 'target', modVal: true }, + tech: 'js', + path: 'libs/bem-components/common.blocks/popup/_target/popup_target.js', + level: 'libs/bem-components/common.blocks' + source: 'libs/bem-components/common.blocks/popup/_target/popup_target.js' }, +... +] +*/ ``` From 5e9a58ef95449298a849667a2d90979041eef318 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Thu, 25 Aug 2016 15:49:00 +0300 Subject: [PATCH 27/38] edit from blond@ part2 --- README.ru.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/README.ru.md b/README.ru.md index 183e0eb..0940f6f 100644 --- a/README.ru.md +++ b/README.ru.md @@ -174,11 +174,9 @@ stream.on('end', () => console.log(files)); | Событие | Описание | |----------|-----| |'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| -| 'error' | Генерируется, если при обходе уровней произошла ошибка. Возвращается ответ с описанием ошибки.| +| 'error' | Генерируется, если при обходе уровней произошла ошибка. Возвращает ответ с описанием ошибки.| | 'end' | Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. | -**Примечание** [Полный список событий](https://nodejs.org/api/stream.html#stream_class_stream_readable). - ## Примеры использования Типовые задачи, решаемые с полученными JavaScript-объектами: @@ -198,6 +196,7 @@ var walk = require('bem-walk'), } }, groups = {}; +const util = require('util'); var stream = walk([ 'libs/bem-components/common.blocks', @@ -208,11 +207,11 @@ stream.on('data', file => (groups[file.entity.block] = []).push(file)); stream.on('error', console.error); -stream.on('end', () => console.log(groups)); +stream.on('end', () => console.log(util.inspect(groups, { depth: null }))); /* { button: - [ { entity: { block: 'button' }, + [ { entity: { block: 'button', modName: 'togglable', modVal: 'radio' }, tech: 'spec.js', path: 'libs/bem-components/common.blocks/button/_togglable/button_togglable_radio.spec.js', level: 'libs/bem-components/common.blocks' } ], @@ -240,7 +239,7 @@ var stream = walk([ ], config); stream.on('data', function(file) { - if (file.entity.block !== 'button') { + if (file.entity.block == 'popup') { files.push(file); } }); @@ -272,8 +271,7 @@ var walk = require('bem-walk'), 'lib/bem-components/common.blocks': { naming: 'origin' }, 'common.blocks': { naming: 'origin' } } - }, - files = []; + }; var stream = walk([ 'libs/bem-components/common.blocks', @@ -282,19 +280,22 @@ var stream = walk([ stream.pipe(through2.obj(function (file, enc, callback) { // Создание свойства source объекта file - file.source = fs.readFileSync(file.path).toString('utf-8'); - this.push(file); + if(fs.statSync(file.path).isFile()) { + file.source = fs.readFileSync(file.path, 'utf-8'); + } + this.push(file); callback(); })) .pipe(stringify()) .pipe(process.stdout); + /* -[{ entity: { block: 'popup', modName: 'target', modVal: true }, - tech: 'js', - path: 'libs/bem-components/common.blocks/popup/_target/popup_target.js', - level: 'libs/bem-components/common.blocks' - source: 'libs/bem-components/common.blocks/popup/_target/popup_target.js' }, +[{"entity":{"block":"search","elem":"header"}, + "tech":"css", + "path":"common.blocks/search/__header/search__header.css", + "level":"common.blocks", + "source":".search__header {\n\tdisplay: block;\n\tfont-size: 20px;\n\tcolor: rgba(0,0,0,0.84);\n\tmargin: 0;\n\tpadding: 0 0 16px;\n\n}\n\n"}, ... ] */ From c72fab627983961504de6286c4a0ae2d5a5371a2 Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Thu, 25 Aug 2016 15:52:27 +0300 Subject: [PATCH 28/38] verbs --- README.ru.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.ru.md b/README.ru.md index 0940f6f..7689aaa 100644 --- a/README.ru.md +++ b/README.ru.md @@ -173,8 +173,8 @@ stream.on('end', () => console.log(files)); | Событие | Описание | |----------|-----| -|'data'|Возвращает обработчику JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| -| 'error' | Генерируется, если при обходе уровней произошла ошибка. Возвращает ответ с описанием ошибки.| +|'data'|Возвращается JavaScript-объект с информацией о найденном файле.

Ниже рассмотрен JSON-интерфейс, включающий элементы, которые входят в ответ метода `walk`. Объекты и ключи приведены с примерами значений.

**Пример**

{
"entity": { "block": "page" },
"level": "libs/bem-core/desktop.blocks",
"tech": "bemhtml",
"path": "libs/bem-core/desktop.blocks/page/page.bemhtml.js"
}

`entity` — БЭМ-сущность;
`level` — путь к директории;
`tech` — технология реализации;
`path` — относительный путь к файлу.| +| 'error' | Генерируется, если при обходе уровней произошла ошибка. Возвращается объект с описанием ошибки.| | 'end' | Генерируется, когда `bem-walk` заканчивает обход уровней, описанных в объекте `levels`. | ## Примеры использования From 16ad10f2c4eb8787b7355bdfb99ea6400c519bed Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Thu, 25 Aug 2016 16:00:19 +0300 Subject: [PATCH 29/38] deleted points --- README.ru.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.ru.md b/README.ru.md index 7689aaa..ebe329b 100644 --- a/README.ru.md +++ b/README.ru.md @@ -180,9 +180,9 @@ stream.on('end', () => console.log(files)); ## Примеры использования Типовые задачи, решаемые с полученными JavaScript-объектами: -* [Группировка](#Группировка). -* [Фильтрация](#Фильтрация). -* [Трансформация имеющихся данных](#Трансформация). +* [Группировка](#Группировка) +* [Фильтрация](#Фильтрация) +* [Трансформация имеющихся данных](#Трансформация) ### Группировка From dbdb4ee46a3ac8be441a008c819c4468f36f729d Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Thu, 25 Aug 2016 16:04:22 +0300 Subject: [PATCH 30/38] fixed the code examples --- README.ru.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.ru.md b/README.ru.md index ebe329b..ae7afaa 100644 --- a/README.ru.md +++ b/README.ru.md @@ -67,8 +67,8 @@ var config = { |`sheme` — cхема файловой системы.|`nested`|`nested`, `flat`| Подробнее: -* [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/); -* [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/). +* [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/) +* [bem-fs-scheme](https://ru.bem.info/toolbox/sdk/bem-fs-scheme/) **Примечание** Чтобы не определять уровни проекта вручную, воспользуйтесь инструментом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). @@ -213,7 +213,8 @@ stream.on('end', () => console.log(util.inspect(groups, { depth: null }))); { button: [ { entity: { block: 'button', modName: 'togglable', modVal: 'radio' }, tech: 'spec.js', - path: 'libs/bem-components/common.blocks/button/_togglable/button_togglable_radio.spec.js', + path: 'libs/bem-components/common.blocks/button/_togglable/ + button_togglable_radio.spec.js', level: 'libs/bem-components/common.blocks' } ], ... } @@ -295,7 +296,8 @@ stream.pipe(through2.obj(function (file, enc, callback) { "tech":"css", "path":"common.blocks/search/__header/search__header.css", "level":"common.blocks", - "source":".search__header {\n\tdisplay: block;\n\tfont-size: 20px;\n\tcolor: rgba(0,0,0,0.84);\n\tmargin: 0;\n\tpadding: 0 0 16px;\n\n}\n\n"}, + "source":".search__header {\n\tdisplay: block;\n\tfont-size: 20px;\n\tcolor: + rgba(0,0,0,0.84);\n\tmargin: 0;\n\tpadding: 0 0 16px;\n\n}\n\n"}, ... ] */ From 2c6c0ddfc755b8ff4ed558932322ba055462803b Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Fri, 26 Aug 2016 11:17:07 +0300 Subject: [PATCH 31/38] edited by tadatuta --- README.ru.md | 90 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 55 insertions(+), 35 deletions(-) diff --git a/README.ru.md b/README.ru.md index ae7afaa..903bb87 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,5 +1,11 @@ # bem-walk +Инструмент позволяет обойти файловую систему БЭМ-проекта и получить следующую информацию о найденных файлах: + +* тип БЭМ-сущности (Блок, Элемент, Модификатор); +* технология реализации; +* расположение на файловой системе. + [![NPM Status][npm-img]][npm] [![Travis Status][test-img]][travis] [![Windows Status][appveyor-img]][appveyor] @@ -21,12 +27,6 @@ [david]: https://david-dm.org/bem-sdk/bem-walk [david-img]: http://img.shields.io/david/bem-sdk/bem-walk.svg?style=flat -Инструмент позволяет обойти файловую систему БЭМ-проекта и получить следующую информацию о найденных файлах: - -* тип БЭМ-сущности (Блок, Элемент, Модификатор); -* технология реализации; -* расположение на файловой системе. - ## Быстрый старт **Примечание** Для работы с `bem-walk` требуется установить Node.js 4.0+. @@ -53,13 +53,19 @@ var walk = require('bem-walk'); var config = { // уровни проекта levels: { - 'lib/bem-core/common.blocks': { naming: 'two-dashes' }, // `naming` — схема именования файлов - 'common.blocks': { sheme: 'nested' } // `scheme` — схема файловой системы + 'lib/bem-core/common.blocks': { + // `naming` — схема именования файлов + naming: 'two-dashes' + }, + 'common.blocks': { + // `scheme` — схема файловой системы + sheme: 'nested' + } } }; ``` -**Примечание** Для каждого уровня указывается схема именования файлов или организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. +**Примечание** Для каждого уровня указывается схема именования файлов либо организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. | Схема | Значение по умолчанию | Все возможные значения | |----------|-----|----------| @@ -106,22 +112,20 @@ var stream = walk(levels, levelMap); Передайте методу walk() объекты `levels` и `config`. -Для получения данных о найденных файлах используется поток (stream). Когда порция данных получена, генерируется событие `data` и информация о найденном файле добавляется в массив `files`. При возникновении ошибки `bem-walk` прекращает обработку запроса и возвращает ответ, содержащий идентификатор ошибки и ее описание. Событие `end` наступает при окончании получения данных из потока. +Для получения данных о найденных файлах используется поток (stream). Когда порция данных получена, генерируется событие `data` и [информация о найденном файле](#Выходные-данные) добавляется в массив `files`. При возникновении ошибки `bem-walk` прекращает обработку запроса и возвращает ответ, содержащий идентификатор ошибки и ее описание. Событие `end` наступает при окончании получения данных из потока. ```js var files = []; var stream = walk(levels, config); - -stream.on('data', file => files.push(file)); // добавляем информацию о найденном файле в конец массива files +// добавляем информацию о найденном файле в конец массива files +stream.on('data', file => files.push(file)); stream.on('error', console.error); stream.on('end', () => console.log(files)); ``` -[Подробнее о возвращаемых данных](#Выходные-данные). - В результате выполненных действий полный код JavaScript-файла должен иметь следующий вид: ```js @@ -129,8 +133,12 @@ var walk = require('bem-walk'), config = { // уровни проекта levels: { - 'lib/bem-core/common.blocks': { naming: 'origin' }, - 'common.blocks': { naming: 'origin' } + 'lib/bem-core/common.blocks': { + naming: 'origin' + }, + 'common.blocks': { + naming: 'origin' + } } }, levels = [ @@ -191,8 +199,12 @@ var walk = require('bem-walk'), config = { // уровни проекта levels: { - 'lib/bem-components/common.blocks': { naming: 'origin' }, - 'common.blocks': { naming: 'origin' } + 'lib/bem-components/common.blocks': { + naming: 'origin' + }, + 'common.blocks': { + naming: 'origin' + } } }, groups = {}; @@ -207,7 +219,9 @@ stream.on('data', file => (groups[file.entity.block] = []).push(file)); stream.on('error', console.error); -stream.on('end', () => console.log(util.inspect(groups, { depth: null }))); +stream.on('end', () => console.log(util.inspect(groups, { + depth: null +}))); /* { button: @@ -226,10 +240,14 @@ stream.on('end', () => console.log(util.inspect(groups, { depth: null }))); ```js var walk = require('bem-walk'), config = { - // уровни проекта + // уровни проекта levels: { - 'lib/bem-components/common.blocks': { naming: 'origin' }, - 'common.blocks': { naming: 'origin' } + 'lib/bem-components/common.blocks': { + naming: 'origin' + }, + 'common.blocks': { + naming: 'origin' + } } }, files = []; @@ -242,7 +260,7 @@ var stream = walk([ stream.on('data', function(file) { if (file.entity.block == 'popup') { files.push(file); - } + } }); stream.on('error', console.error); @@ -269,8 +287,12 @@ var walk = require('bem-walk'), config = { // уровни проекта levels: { - 'lib/bem-components/common.blocks': { naming: 'origin' }, - 'common.blocks': { naming: 'origin' } + 'lib/bem-components/common.blocks': { + naming: 'origin' + }, + 'common.blocks': { + naming: 'origin' + } } }; @@ -279,18 +301,16 @@ var stream = walk([ 'common.blocks' ], config); -stream.pipe(through2.obj(function (file, enc, callback) { - // Создание свойства source объекта file - if(fs.statSync(file.path).isFile()) { - file.source = fs.readFileSync(file.path, 'utf-8'); - } - - this.push(file); - callback(); -})) +stream.pipe(through2.obj(function(file, enc, callback) { + if (fs.statSync(file.path).isFile()) { + // Создание свойства source объекта file + file.source = fs.readFileSync(file.path, 'utf-8'); + } + this.push(file); + callback(); + })) .pipe(stringify()) .pipe(process.stdout); - /* [{"entity":{"block":"search","elem":"header"}, "tech":"css", From 2d476049d505bb42e1df8818fec67ad0a6741b4a Mon Sep 17 00:00:00 2001 From: godfreyd <“sergei-b84@bk.ru”> Date: Mon, 29 Aug 2016 12:58:57 +0300 Subject: [PATCH 32/38] Changed the description --- README.ru.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/README.ru.md b/README.ru.md index 903bb87..a638edd 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,10 +1,6 @@ # bem-walk -Инструмент позволяет обойти файловую систему БЭМ-проекта и получить следующую информацию о найденных файлах: - -* тип БЭМ-сущности (Блок, Элемент, Модификатор); -* технология реализации; -* расположение на файловой системе. +Инструмент для обхода файловой системы БЭМ-проекта. [![NPM Status][npm-img]][npm] [![Travis Status][test-img]][travis] @@ -27,6 +23,12 @@ [david]: https://david-dm.org/bem-sdk/bem-walk [david-img]: http://img.shields.io/david/bem-sdk/bem-walk.svg?style=flat +Bem-walk позволяет получить следующую информацию о найденных файлах: + +* тип БЭМ-сущности (Блок, Элемент, Модификатор); +* технология реализации; +* расположение на файловой системе. + ## Быстрый старт **Примечание** Для работы с `bem-walk` требуется установить Node.js 4.0+. @@ -47,7 +49,7 @@ var walk = require('bem-walk'); ### 3. Опишите уровни файловой системы -Опишите уровни файловой системы проекта в объекте `config`. +Опишите уровни файловой системы проекта в объекте `config`, созданного на шаге №2 файла. ```js var config = { @@ -67,10 +69,12 @@ var config = { **Примечание** Для каждого уровня указывается схема именования файлов либо организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. -| Схема | Значение по умолчанию | Все возможные значения | -|----------|-----|----------| -|`naming` — схема именования файлов.|`origin`| `origin`, `two-dashes`| -|`sheme` — cхема файловой системы.|`nested`|`nested`, `flat`| +Описание возможных значений, которые можно задать для каждой из схем, представлено в таблице. + +| Ключ | Схема | Значение по умолчанию | Все возможные значения | +|----|------|-----|----------| +| `naming` | Именования файлов.|`origin`| `origin`, `two-dashes`| +| `scheme` | Файловой системы.|`nested`|`nested`, `flat`| Подробнее: * [bem-naming](https://ru.bem.info/toolbox/sdk/bem-naming/) @@ -168,7 +172,7 @@ stream.on('end', () => console.log(files)); #### Входные параметры -Требования к поиску определяются параметрами `levels` и `config`. Параметры нельзя передавать в любой последовательности. +Требования к поиску определяются параметрами `levels` и `config`. | Параметр | Тип | Описание | |----------|-----|----------| From ac26adc1e49b746c9f97329a5648c6d0b6825031 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgodfreyd=E2=80=9D?= <“sergei-b84@bk.ru”> Date: Wed, 31 Aug 2016 23:59:52 +0300 Subject: [PATCH 33/38] corrections from blond - part 1 --- README.ru.md | 62 ++++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/README.ru.md b/README.ru.md index a638edd..ef6cc57 100644 --- a/README.ru.md +++ b/README.ru.md @@ -23,10 +23,10 @@ [david]: https://david-dm.org/bem-sdk/bem-walk [david-img]: http://img.shields.io/david/bem-sdk/bem-walk.svg?style=flat -Bem-walk позволяет получить следующую информацию о найденных файлах: +`bem-walk` возвращает следующую информацию о найденных файлах: -* тип БЭМ-сущности (Блок, Элемент, Модификатор); -* технология реализации; +* тип БЭМ-сущности ([Блок](https://ru.bem.info/methodology/key-concepts/#Блок), [Элемент](https://ru.bem.info/methodology/key-concepts/#Элемент) или [Модификатор](https://ru.bem.info/methodology/key-concepts/#Модификатор)); +* [технология реализации](https://ru.bem.info/methodology/key-concepts/#Технология-реализации); * расположение на файловой системе. ## Быстрый старт @@ -44,7 +44,7 @@ $ npm install --save bem-walk Создайте JavaScript-файл с произвольным именем и добавьте строку следующего вида: ```js -var walk = require('bem-walk'); +const walk = require('bem-walk'); ``` ### 3. Опишите уровни файловой системы @@ -52,7 +52,7 @@ var walk = require('bem-walk'); Опишите уровни файловой системы проекта в объекте `config`, созданного на шаге №2 файла. ```js -var config = { +const config = { // уровни проекта levels: { 'lib/bem-core/common.blocks': { @@ -71,7 +71,7 @@ var config = { Описание возможных значений, которые можно задать для каждой из схем, представлено в таблице. -| Ключ | Схема | Значение по умолчанию | Все возможные значения | +| Ключ | Схема | Значение по умолчанию | Возможные значения | |----|------|-----|----------| | `naming` | Именования файлов.|`origin`| `origin`, `two-dashes`| | `scheme` | Файловой системы.|`nested`|`nested`, `flat`| @@ -83,9 +83,9 @@ var config = { **Примечание** Чтобы не определять уровни проекта вручную, воспользуйтесь инструментом [`bem-config`](https://ru.bem.info/toolbox/sdk/bem-config/). ```js -var config = require('bem-config')(); -var levelMap = config.levelMapSync(); -var stream = walk(levels, levelMap); +const config = require('bem-config')(); +const levelMap = config.levelMapSync(); +const stream = walk(levels, levelMap); ``` ### 4. Опишите пути обхода @@ -97,7 +97,7 @@ var stream = walk(levels, levelMap); * Относительно корневого каталога. ```js - var levels = [ + const levels = [ 'libs/bem-core/common.blocks', 'common.blocks' ]; @@ -106,7 +106,7 @@ var stream = walk(levels, levelMap); * Абсолютные. ```js - var levels = [ + const levels = [ '/path/to/project/lib/bem-core/common.blocks', '/path/to/project/common.blocks' ]; @@ -119,9 +119,9 @@ var stream = walk(levels, levelMap); Для получения данных о найденных файлах используется поток (stream). Когда порция данных получена, генерируется событие `data` и [информация о найденном файле](#Выходные-данные) добавляется в массив `files`. При возникновении ошибки `bem-walk` прекращает обработку запроса и возвращает ответ, содержащий идентификатор ошибки и ее описание. Событие `end` наступает при окончании получения данных из потока. ```js -var files = []; +const files = []; -var stream = walk(levels, config); +const stream = walk(levels, config); // добавляем информацию о найденном файле в конец массива files stream.on('data', file => files.push(file)); @@ -133,7 +133,7 @@ stream.on('end', () => console.log(files)); В результате выполненных действий полный код JavaScript-файла должен иметь следующий вид: ```js -var walk = require('bem-walk'), +const walk = require('bem-walk'), config = { // уровни проекта levels: { @@ -151,7 +151,7 @@ var walk = require('bem-walk'), ], files = []; -var stream = walk(levels, config); +const stream = walk(levels, config); stream.on('data', file => files.push(file)); @@ -198,8 +198,10 @@ stream.on('end', () => console.log(files)); ### Группировка +> Группируем найденные файлы по имени блока. + ```js -var walk = require('bem-walk'), +const walk = require('bem-walk'), config = { // уровни проекта levels: { @@ -214,7 +216,7 @@ var walk = require('bem-walk'), groups = {}; const util = require('util'); -var stream = walk([ +const stream = walk([ 'libs/bem-components/common.blocks', 'common.blocks' ], config); @@ -241,9 +243,11 @@ stream.on('end', () => console.log(util.inspect(groups, { ### Фильтрация +> Находим файлы блока `popup`. + ```js -var walk = require('bem-walk'), - config = { +const walk = require('bem-walk'), + const config = { // уровни проекта levels: { 'lib/bem-components/common.blocks': { @@ -253,10 +257,10 @@ var walk = require('bem-walk'), naming: 'origin' } } - }, - files = []; + }; +const files = []; -var stream = walk([ +const stream = walk([ 'libs/bem-components/common.blocks', 'common.blocks' ], config); @@ -283,12 +287,14 @@ stream.on('end', () => console.log(files)); ### Трансформация +> Находим БЭМ-файлы, читаем их содержимое и создаем новое свойство `source`. + ```js -var walk = require('bem-walk'), - stringify = require('JSONStream').stringify, - through2 = require('through2'), - fs = require('fs'), - config = { +const walk = require('bem-walk'), +const stringify = require('JSONStream').stringify, +const through2 = require('through2'), +const fs = require('fs'), +const config = { // уровни проекта levels: { 'lib/bem-components/common.blocks': { @@ -300,7 +306,7 @@ var walk = require('bem-walk'), } }; -var stream = walk([ +const stream = walk([ 'libs/bem-components/common.blocks', 'common.blocks' ], config); From 3ce532fe678ec413079f4c982a9005c588ea1b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgodfreyd=E2=80=9D?= <“sergei-b84@bk.ru”> Date: Fri, 2 Sep 2016 11:58:08 +0300 Subject: [PATCH 34/38] corrections from blond - part 2 --- README.ru.md | 159 ++++++++++++++++++++++----------------------------- 1 file changed, 67 insertions(+), 92 deletions(-) diff --git a/README.ru.md b/README.ru.md index ef6cc57..e97b705 100644 --- a/README.ru.md +++ b/README.ru.md @@ -133,33 +133,24 @@ stream.on('end', () => console.log(files)); В результате выполненных действий полный код JavaScript-файла должен иметь следующий вид: ```js -const walk = require('bem-walk'), - config = { - // уровни проекта - levels: { - 'lib/bem-core/common.blocks': { - naming: 'origin' - }, - 'common.blocks': { - naming: 'origin' - } - } - }, - levels = [ - 'libs/bem-core/common.blocks', - 'common.blocks' - ], - files = []; - -const stream = walk(levels, config); - -stream.on('data', file => files.push(file)); - -stream.on('error', console.error); +const walk = require('bem-walk'); +const config = require('bem-config')(); +const levels = [ + 'libs/bem-components/common.blocks', + 'common.blocks' +]; +const files = []; -stream.on('end', () => console.log(files)); +const stream = walk(levels, { + levels: config.levelMapSync() + }) + .on('data', file => files.push(file)) + .on('error', console.error) + .on('end', () => console.log(files)); ``` +**Примечание** В примере используется пакет `bem-config`. + ## API ### Метод walk @@ -201,33 +192,29 @@ stream.on('end', () => console.log(files)); > Группируем найденные файлы по имени блока. ```js -const walk = require('bem-walk'), - config = { - // уровни проекта - levels: { - 'lib/bem-components/common.blocks': { - naming: 'origin' - }, - 'common.blocks': { - naming: 'origin' - } - } - }, - groups = {}; +const walk = require('bem-walk'); +const config = require('bem-config')(); const util = require('util'); - -const stream = walk([ +const levels = [ 'libs/bem-components/common.blocks', 'common.blocks' -], config); - -stream.on('data', file => (groups[file.entity.block] = []).push(file)); - -stream.on('error', console.error); - -stream.on('end', () => console.log(util.inspect(groups, { - depth: null -}))); +]; +const groups = {}; + +const stream = walk(levels, { + levels: config.levelMapSync() + }) + .on('data', file => { + // Получаем имя блока для найденного файла. + const block = file.entity.block; + + // Добавляем информацию о найденном файле. + (groups[block] = []).push(file); + }) + .on('error', console.error) + .on('end', () => console.log(util.inspect(groups, { + depth: null + }))); /* { button: @@ -246,34 +233,28 @@ stream.on('end', () => console.log(util.inspect(groups, { > Находим файлы блока `popup`. ```js -const walk = require('bem-walk'), - const config = { - // уровни проекта - levels: { - 'lib/bem-components/common.blocks': { - naming: 'origin' - }, - 'common.blocks': { - naming: 'origin' - } - } - }; -const files = []; - -const stream = walk([ +const walk = require('bem-walk'); +const config = require('bem-config')(); +const levels = [ 'libs/bem-components/common.blocks', 'common.blocks' -], config); +]; +const files = []; -stream.on('data', function(file) { - if (file.entity.block == 'popup') { - files.push(file); - } -}); +const stream = walk(levels, { + levels: config.levelMapSync() + }) + .on('data', file => { + // Получаем имя блока для найденного файла. + const block = file.entity.block; -stream.on('error', console.error); - -stream.on('end', () => console.log(files)); + // Добавляем информацию о найденном файле. + if (block == 'popup') { + files.push(file); + } + }) + .on('error', console.error) + .on('end', () => console.log(files)); /* [{ entity: { block: 'popup', modName: 'target', modVal: true }, @@ -290,32 +271,26 @@ stream.on('end', () => console.log(files)); > Находим БЭМ-файлы, читаем их содержимое и создаем новое свойство `source`. ```js -const walk = require('bem-walk'), -const stringify = require('JSONStream').stringify, -const through2 = require('through2'), -const fs = require('fs'), -const config = { - // уровни проекта - levels: { - 'lib/bem-components/common.blocks': { - naming: 'origin' - }, - 'common.blocks': { - naming: 'origin' - } - } - }; - -const stream = walk([ +const fs = require('fs'); +const walk = require('bem-walk'); +const config = require('bem-config')(); +const stringify = require('JSONStream').stringify; +const through2 = require('through2'); +const levels = [ 'libs/bem-components/common.blocks', 'common.blocks' -], config); +]; + +const stream = walk(levels, { + levels: config.levelMapSync() + }) + .pipe(through2.obj(function(file, enc, callback) { -stream.pipe(through2.obj(function(file, enc, callback) { if (fs.statSync(file.path).isFile()) { - // Создание свойства source объекта file + // Записываем содержимое файла в поле `source`. file.source = fs.readFileSync(file.path, 'utf-8'); } + this.push(file); callback(); })) From 627b9eb1bbadfc35806954d2d90060d448019986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgodfreyd=E2=80=9D?= <“sergei-b84@bk.ru”> Date: Fri, 2 Sep 2016 12:46:14 +0300 Subject: [PATCH 35/38] changed sentence on 26 line --- README.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.md b/README.ru.md index e97b705..5192492 100644 --- a/README.ru.md +++ b/README.ru.md @@ -23,7 +23,7 @@ [david]: https://david-dm.org/bem-sdk/bem-walk [david-img]: http://img.shields.io/david/bem-sdk/bem-walk.svg?style=flat -`bem-walk` возвращает следующую информацию о найденных файлах: +Возвращает следующую информацию о найденных файлах: * тип БЭМ-сущности ([Блок](https://ru.bem.info/methodology/key-concepts/#Блок), [Элемент](https://ru.bem.info/methodology/key-concepts/#Элемент) или [Модификатор](https://ru.bem.info/methodology/key-concepts/#Модификатор)); * [технология реализации](https://ru.bem.info/methodology/key-concepts/#Технология-реализации); From b68ee1f44586cd6195ddd5cbba09321d76309d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgodfreyd=E2=80=9D?= <“sergei-b84@bk.ru”> Date: Fri, 2 Sep 2016 12:58:32 +0300 Subject: [PATCH 36/38] added note --- README.ru.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.ru.md b/README.ru.md index 5192492..4770fb3 100644 --- a/README.ru.md +++ b/README.ru.md @@ -47,9 +47,11 @@ $ npm install --save bem-walk const walk = require('bem-walk'); ``` +**Примечание** Созданный JavaScript-файл будет использоваться для всех последующих шагов. + ### 3. Опишите уровни файловой системы -Опишите уровни файловой системы проекта в объекте `config`, созданного на шаге №2 файла. +Опишите уровни файловой системы проекта в объекте `config`. ```js const config = { From 387e909cebdb0995f0fd2755991ec0579d88438a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgodfreyd=E2=80=9D?= <“sergei-b84@bk.ru”> Date: Fri, 2 Sep 2016 13:00:20 +0300 Subject: [PATCH 37/38] deleted note --- README.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.ru.md b/README.ru.md index 4770fb3..c48f416 100644 --- a/README.ru.md +++ b/README.ru.md @@ -69,7 +69,7 @@ const config = { }; ``` -**Примечание** Для каждого уровня указывается схема именования файлов либо организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. +Для каждого уровня указывается схема именования файлов либо организации файловой системы. Это позволяет при обходе получать информацию о БЭМ-сущностях [по их именам](https://ru.bem.info/toolbox/sdk/bem-naming/#Строковое-представление) или по именам файлов и директорий. Описание возможных значений, которые можно задать для каждой из схем, представлено в таблице. From f3110c0ad4669dbcf010fb8b3084ad7b6ef339f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgodfreyd=E2=80=9D?= <“sergei-b84@bk.ru”> Date: Thu, 15 Sep 2016 15:19:38 +0300 Subject: [PATCH 38/38] added try/catch --- README.ru.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.ru.md b/README.ru.md index c48f416..d7f95b0 100644 --- a/README.ru.md +++ b/README.ru.md @@ -131,6 +131,7 @@ stream.on('error', console.error); stream.on('end', () => console.log(files)); ``` +### Полный код примера В результате выполненных действий полный код JavaScript-файла должен иметь следующий вид: @@ -287,14 +288,17 @@ const stream = walk(levels, { levels: config.levelMapSync() }) .pipe(through2.obj(function(file, enc, callback) { - - if (fs.statSync(file.path).isFile()) { - // Записываем содержимое файла в поле `source`. - file.source = fs.readFileSync(file.path, 'utf-8'); + try { + // Некоторые технологии (например, `i18n`) могут быть директориями, а не файлами. + if (fs.statSync(file.path).isFile()) { + // Записываем содержимое файла в поле `source`. + file.source = fs.readFileSync(file.path, 'utf-8'); + this.push(file); + } + + } catch (err) { + callback(err); } - - this.push(file); - callback(); })) .pipe(stringify()) .pipe(process.stdout);