Skip to content

enb/enb-bemxjst

Repository files navigation

enb-bemxjst

NPM version Build Status Build status Coverage Status Dependency Status

ΠŸΠ°ΠΊΠ΅Ρ‚ прСдоставляСт Π½Π°Π±ΠΎΡ€ ENB-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ для сборки BEMTREE- ΠΈ BEMHTML-шаблонов Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, построСнных ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π‘Π­Πœ.

Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° enb-bemxjst:

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΈΡ… API описаны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ API Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.

Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° enb-bemxjst ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ компилятор BEM-XJST. ΠœΠ°ΠΆΠΎΡ€Π½Π°Ρ вСрсия enb-bemxjst всСгда совпадаСт с ΠΌΠ°ΠΆΠΎΡ€Π½ΠΎΠΉ вСрсиСй bem-xjst.

Установка

УстановитС ΠΏΠ°ΠΊΠ΅Ρ‚ enb-bemxjst:

$ npm install --save-dev enb-bemxjst

ВрСбования: Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° enb вСрсии 0.16.0 ΠΈ Π²Ρ‹ΡˆΠ΅.

ΠžΠ±Π·ΠΎΡ€ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

Быстрый старт

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: bemtree, bemhtml.

var BemtreeTech = require('enb-bemxjst/techs/bemtree'),
    BemhtmlTech = require('enb-bemxjst/techs/bemhtml'),
    FileProvideTech = require('enb/techs/file-provider'),
    bemTechs = require('enb-bem-techs');

 module.exports = function(config) {
     config.node('bundle', function(node) {
         // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ FileList
         node.addTechs([
             [FileProvideTech, { target: '?.bemdecl.js' }],
             [bemTechs.levels, { levels: ['blocks'] }],
             bemTechs.deps,
             bemTechs.files
         ]);

         // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ BEMTREE-Ρ„Π°ΠΉΠ»
         node.addTech(BemtreeTech);
         node.addTarget('?.bemtree.js');

         // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ BEMHTML-Ρ„Π°ΠΉΠ»
         node.addTech(BemhtmlTech);
         node.addTarget('?.bemhtml.js');
     });
 };

Для сборки HTML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ bemjson-to-html.

var BemjsonToHtmlTech = require('enb-bemxjst/techs/bemjson-to-html'),
    BemhtmlTech = require('enb-bemxjst/techs/bemhtml'),
    FileProvideTech = require('enb/techs/file-provider'),
    bemTechs = require('enb-bem-techs');

module.exports = function(config) {
    config.node('bundle', function(node) {
        // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ BEMJSON-Ρ„Π°ΠΉΠ»
        node.addTech([FileProvideTech, { target: '?.bemjson.js' }]);

        // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ FileList
        node.addTechs([
            [bemTechs.levels, { levels: ['blocks'] }],
            [bemTechs.bemjsonToBemdecl],
            [bemTechs.deps],
            [bemTechs.files]
        ]);

        // Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ BEMHTML-Ρ„Π°ΠΉΠ»
        node.addTech(BemhtmlTech);
        node.addTarget('?.bemhtml.js');

        // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ HTML-Ρ„Π°ΠΉΠ»
        node.addTech(BemjsonToHtmlTech);
        node.addTarget('?.html');
    });
};

Π Π°Π±ΠΎΡ‚Π° с тСхнологиями

По Π‘Π­Πœ-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ хранятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .bemtree.js ΠΈ .bemhtml.js Π² дирСкториях Π±Π»ΠΎΠΊΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΡ… исходныС Ρ„Π°ΠΉΠ»Ρ‹.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ с шаблонами (.bemtree.js ΠΈΠ»ΠΈ .bemhtml.js) ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» (?.bemtree.js ΠΈΠ»ΠΈ ?.bemhtml.js) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” скомпилированный Ρ„Π°ΠΉΠ» ?.bemhtml.js ΠΈΠ»ΠΈ ?.bemtree.js β€” ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² зависимости ΠΎΡ‚ наличия ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ систСмы ΠΈ Π΅Π΅ Ρ‚ΠΈΠΏΠ° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

ИсполнСниС шаблонов в Node.js

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ CommonJS.

var BEMTREE = require('bundle.bemtree.js').BEMTREE, // ΠŸΡƒΡ‚ΡŒ Π΄ΠΎ скомпилированного BEMTREE-Ρ„Π°ΠΉΠ»Π°
    BEMHTML = require('bundle.bemhtml.js').BEMHTML; // ΠŸΡƒΡ‚ΡŒ Π΄ΠΎ скомпилированного BEMHTML-Ρ„Π°ΠΉΠ»Π°

var bemjson = BEMTREE.apply({ block: 'page', data: { /* ... */ } }),
    html = BEMHTML.apply(bemjson); // <html>...</html>

ИсполнСниС шаблонов Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° страницу ΠΊΠ°ΠΊ JavaScript-Ρ„Π°ΠΉΠ».

<script src="bundle.bemtree.js"></script>
<script src="bundle.bemhtml.js"></script>

Π’ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ способы исполнСния шаблонов зависят ΠΎΡ‚ наличия ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ систСмы:

  • Π‘Π΅Π· ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ систСмы

    Π¨Π°Π±Π»ΠΎΠ½Ρ‹ доступны ΠΈΠ· глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ BEMTREE ΠΈΠ»ΠΈ BEMHTML.

    var bemjson = BEMTREE.apply({ block: 'page', data: { /* ... */ } }),
        html = BEMHTML.apply(bemjson); // <html>...</html>
  • Π‘ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ систСмой YModules

    Π¨Π°Π±Π»ΠΎΠ½Ρ‹ доступны ΠΈΠ· ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ систСмы (YModules):

    modules.require(['BEMTREE', 'BEMHTML'], function(BEMTREE, BEMHTML) {
        var bemjson = BEMTREE.apply({ block: 'page', data: { /* ... */ } }),
            html = BEMHTML.apply(bemjson); // <html>...</html>
    });

ИспользованиС шаблонов для сборки HTML

HTML – Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния скомпилированного шаблона ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ BEMJSON-Ρ„Π°ΠΉΠ»Ρƒ.

Π‘Π±ΠΎΡ€ΠΊΠ° HTML (Ρ„Π°ΠΉΠ» ?.html) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ enb-bemxjst ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π΄Π²Π° этапа:

  1. Π€Π°ΠΉΠ» ?.bemhtml.js собираСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ bemhtml.
  2. BEMJSON ΠΈ скомпилированный ?.bemhtml.js-Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ bemjson-to-html, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ HTML-Ρ„Π°ΠΉΠ» (?.html).

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Π°

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ bemtree ΠΈ bemhtml ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΊΠ°ΠΊ глобально, Ρ‚Π°ΠΊ ΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… систСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ requires.

Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π² зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ систСмы:

  • имя глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ;
  • имя модуля ΠΈΠ· YModules;
  • ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ для CommonJS.
{
    requires: {
        'lib-name': {
            globals: 'libName',           // НазваниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² глобальной видимости
            ym: 'lib-name',               // Имя модуля ΠΈΠ· YModules
            commonJS: 'path/to/lib-name'  // ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ CommonJS ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ собираСмого Ρ„Π°ΠΉΠ»Π°
        }
    }
}

Π’ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ доступны с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° this.require, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

block('button').content()(function () {
    var lib = this.require('lib-name');

    return lib.hello();
});

НС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ систСмы для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ зависимости глобально. Π’ этом случаС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄Π°ΠΆΠ΅ Ссли Π² срСдС исполнСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ систСма.

{
    requires: {
        'lib-name': {
            globals: 'dependName' // НазваниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² глобальной видимости
        }
    }
}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ moment

УказываСтся ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ:

{
    requires: {
        moment: {
            commonJS: 'moment',  // ΠŸΡƒΡ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ CommonJS ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ собираСмого Ρ„Π°ΠΉΠ»Π°
        }
    }
}

Π’ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ доступСн с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° this.require('moment'). Код шаблона ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ для исполнСния Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ Π² Node.js:

block('post').elem('data').content()(function () {
    var moment = this.require('moment'),  // Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° `moment`

    // ВрСмя Π² миллисСкундах, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ с сСрвСра
    return moment(ctx.param.date).format('YYYY-MM-DD HH:mm:ss');
});

Бинтаксис

БущСствуСт Π΄Π²Π° синтаксиса для BEMHTML-шаблонов:

Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выпуска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ bem-core сокращСнный синтаксис шаблонов считаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ большС Π½Π΅ поддСрТиваСтся.

О ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° JS-синтаксис Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² руководствС ΠΏΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.

Π˜Π½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ

Базовая рСализация BEM-XJST-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π½Π΅ содСрТит шаблонов для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (i18n).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ i18n Π² ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ…, слСдуСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ BEM.I18N ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ сторонними Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ.

BEM.I18N β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΎΠ². Π―Π΄Ρ€ΠΎ находится Π² keyset-Ρ„Π°ΠΉΠ»Π°Ρ… Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π±Π»ΠΎΠΊΠΎΠ²:

ПослС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ BEM.I18N Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ доступна Π² ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° this.require:

block('button').elem('tooltip').content()(function () {
    var i18n = this.require('i18n'),  // Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° `BEM.I18N`

    // Π›ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ»ΡŽΡ‡Π° `tooltip`
    return i18n('button', 'tooltip');
});

ИспользованиС ΠΊΠ°Ρ€Ρ‚ ΠΊΠΎΠ΄Π°

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π° вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ошибок Π² BEMHTML- ΠΈ BEMTREE- ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… с использованиСм ΠΊΠ°Ρ€Ρ‚ ΠΊΠΎΠ΄Π° (ошибка Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π½Π° собранный Ρ„Π°ΠΉΠ», Π° Π½Π° исходный Ρ„Π°ΠΉΠ» с шаблоном) Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ enb-bemxjst вСрсии 8.9.0 ΠΈ Π²Ρ‹ΡˆΠ΅.

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ .enb/make Π½Π° вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρƒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ bemhtml/bemtree Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° опция sourcemaps: true. ΠΠ°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ эту ΠΎΠΏΡ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ Π½Π΅ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅.

'use strict';

const techs = {
    bemhtml: require('enb-bemxjst/techs/bemhtml'),
    ...
};

module.exports = function(config) {
    config.nodes('pages/all', function(nodeConfig) {
        nodeConfig.addTechs([
            // bemhtml
            [techs.bemhtml, {
                target: '?.bemhtml.js',
                sourcemap: env === 'development',
                engineOptions: {
                    production: env === 'production',
                    omitOptionalEndTags: true,
                    unquotedAttrs: true,
                    elemJsInstances: true
                }
            }]
        ]);

        nodeConfig.addTargets(['?.bemhtml.js']);
    });
});

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ докумСнтация

ЛицСнзия

Β© 2013 YANDEX LLC. Код Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ Mozilla Public License 2.0.