npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

bemaker

v0.2.0

Published

BEM project builder

Downloads

39

Readme

Bemaker — сборщик БЭМ-проекта

БЭМ — это методология эффективной разработки веб-приложений. Большое количество информации размещено на официальном сайте http://ru.bem.info.

Bemaker стремится воплотить наиболее простой способ сборки проекта в БЭМ-терминах.

Установка

npm install bemaker

Файловая структура проекта

Bemaker неприхотлив к файловой структуре, насколько это возможно.

Наряду с обычными файлами, в сборке так же участвуют символьные ссылки.

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

Например:

blocks/
    button/
        button.js
        button.css
    input/
        input.js
        input.css

Для указания директорий с блоками используется опция directories.

Элементы и модификаторы

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

Например:

blocks/
    input/
        input.js
        __label.js     // input__label.js
        _size_s.css    // input_size_s.css

Порядок подключения файлов

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

Вес файла рассчитывается с помощью метода weight модуля Selector БЭМ-шаблонизатора Bemer.

В общем виде порядок подключения файлов следующий:

  1. block
  2. block_mod
  3. block_mod_val
  4. block__elem
  5. block_mod__elem
  6. block_mod_val__elem
  7. block__elem_mod
  8. block__elem_mod_val
  9. block_mod__elem_mod_val
  10. block_mod_val__elem_mod_val

Поддерживается возможность использования звёздочек вместо частей БЭМ-имён, что удобно для выделения общего кода в одном месте. У имён со звёздочками приоритет ниже, чем у имён без звёздочек.

Примеры имён со звёздочками: block_mod_*, block__* и так далее.

Иерархия файлов блока

Bemaker перебирает все файлы внутри директории блока вне зависимости от иерархии вложенности.

Например, в отличии от примера, приведённого выше, можно положить файлы элемента и модификатора в дополнительные директории:

blocks/
    input/
        input.js
        __label/
            __label.js
        _size/
            _size_s.css

Уровни переопределения

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

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

Это позволяет контролировать порядок наследования скриптов и переопределения стилей блоков.

Например, блоки могут быть разложены по уровням переопределения, соответствующим платформам устройств пользователя:

common/              // общая реализация блоков
    input/
        input.css
phone/               // уточнения для телефонов
    input/
        input.css    // переопределяем стили для телефонов

Указание зависимостей

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

Зависимости записываются в JSDoc-формате.

По умолчанию поиск зависимостей осуществляется в js-файлах и тегах @bemaker, указанных где-либо в JSDoc. В одном теге можно указать только один блок.

Например, файл select.js говорит о том, что блок select зависит от блоков button и popup:

/**
 * @bemaker button
 * @bemaker popup
 */

Для изменения расширения файлов с зависимостями используется опция dependext.

Для изменения имени JSDoc-тега используется опция jsdoctag.

Использование в терминале

После установки из npm будет доступен исполняемый файл: ./node_modules/.bin/bemaker.

Команды

Команда make

С помощью команды make запускается сборка проекта. Для уточнения деталей сборки используются опции.

Опции

Опция -h, --help

Вывести справку по использованию bemaker в терминале:

$ bemaker --help

Вывести справку по команде make:

$ bemaker make --help

Опция -V, --version

Вывести используемую версию bemaker.

Опция -c, --config <file=bemaker.json>

Опция указывает на конфигурационный файл, содержащий все возможные опции сборки в JSON-формате.

Если директория, в которой выполняется запуск команды, содержит файл bemaker.json — сборщик использует его как конфигурационный файл автоматически.

В следующем примере указывается конфигурационный файл:

$ bemaker make -c path/to/myconfig.json

В конфигурационном файле пути до директорий и файлов следует указывать относительно расположения конфигурационного файла.

Опции, введённые в командной строке имеют приоритет над опциями из конфигурационного файла.

Опция -d, --directories <dir,dirN>

Опция указывает одну или несколько директорий с блоками.

Сборщик ничего не соберёт без указания расположения блоков.

Следующий пример задаёт сборку блоков из директорий common и phone:

$ bemaker make -d common,phone

Идентичный пример в конфигурационном файле:

{
    "directories": ["common", "phone"]
}

Опция -O, --outname <name>

Опция указывает имя сохраняемых файлов.

По умолчанию файлы сохраняются без имени, только с расширением.

Следующий пример задаёт сохраняемым файлам имя all:

$ bemaker make -O all

Идентичный пример в конфигурационном файле:

{
    "outname": "all"
}

Опция -o, --outdir <dir=.>

Опция указывает директорию для сохраняемых файлов. Если указанная директория не существует — она будет создана автоматически.

По умолчанию файлы сохраняются в текущую директорию.

Следующий пример задаёт директорию bundle для сохраняемых файлов:

$ bemaker make -o bundle

Идентичный пример в конфигурационном файле:

{
    "outdir": "bundle"
}

Опция -e, --extensions <.ext,.extN>

Опция указывает одно или несколько расширений для сохраняемых файлов.

По умолчанию сохраняются все найденные расширения.

Следующий пример задаёт к сохранению расширения .js и .css:

$ bemaker make -e .js,.css

Идентичный пример в конфигурационном файле:

{
    "extensions": [".js", ".css"]
}

Опция -b, --blocks <block,blockN>

Опция указывает имя одного или нескольких блоков, которые необходимо собрать.

По умолчанию в сборку включаются все найденные блоки.

Следующий пример задаёт к сборке только блоки button и input:

$ bemaker make -b button,input

Идентичный пример в конфигурационном файле:

{
    "blocks": ["button", "input"]
}

Опция --dependext <ext=.js>

Опция указывает расширение файлов, в которых сборщику следует искать зависимости блоков.

По умолчанию поиск зависимостей осуществляется в файлах с расширением .js.

Следующий пример задаёт поиск зависимостей в файлах .deps.js:

$ bemaker make --dependext .deps.js

Идентичный пример в конфигурационном файле:

{
    "dependext": ".deps.js"
}

Опция --jsdoctag <tag=bemaker>

Опция указывает имя JSDoc-тега, в котором сборщику следует читать зависимости блоков.

По умолчанию чтение зависимостей осуществляется в теге @bemaker.

Следующий пример задаёт чтение зависимостей в теге @deps:

$ bemaker make --jsdoctag deps

Идентичный пример в конфигурационном файле:

{
    "jsdoctag": "deps"
}

Опция --no-before

Опция отменяет установку комментария перед содержимым каждого файла.

По умолчанию в собранном файле перед содержимым каждого файла устанавливается такого вида комментарий:

/* before: blocks/button/button.css */

Следующий пример отменяет установку комментария:

$ bemaker make --no-before

Идентичный пример в конфигурационном файле:

{
    "before": false
}

Опция --no-after

Опция отменяет установку комментария после содержимого каждого файла.

По умолчанию в собранном файле после содержимого каждого файла устанавливается такого вида комментарий:

/* after: blocks/button/button.css */

Следующий пример отменяет установку комментария:

$ bemaker make --no-after

Идентичный пример в конфигурационном файле:

{
    "after": false
}

Опция -v, --verbose <mod,modN>

В процессе сборки выводятся различные типы сообщений.

По умолчанию выводятся все типы сообщений. Опция verbose позволяет настроить вывод только некоторых типов.

Выводимые сообщения делятся на следующие типы:

  1. log — информация о процессе сборки (синим цветом)
  2. info — сообщение о результате сборки (зелёным)
  3. warn — предупреждения (жёлтым)
  4. error — ошибки (красным)

Следующий пример будет выводить только предупреждения и ошибки:

$ bemaker make -v warn,error

Идентичный пример опции в конфигурационном файле:

{
    "verbose": ["warn", "error"]
}