EN
webtehnology
webtehnology
20 февраля 2017

Добрый день!
Выдается такая ошибка
Module "profit-metal": can't resolve dependence "BEMHTML"

при подключении технологии в файле js
modules.define('profit-metal', ['i-bem-dom','BEMHTML', 'jquery'], function(provide, bemDom, BEMHTML, $)

кэш чистил, пробовал такой вариант, ошибка весит.

({
    tech : 'js',
    mustDeps : [
        { tech : 'bemhtml', block : 'i-bem' }
    ]
})
tadatuta
#tadatuta
20 февраля 2017

С версии bem-xjst 2.x добавлять зависимость от блока i-bem нет необходимости — базовые шаблоны были внесены в ядро.

Но судя по ошибке, ядро в принципе не попадает в клиентский JS. Так что смотреть нужно где-то в районе .enb/make.js примерно на эти строки: https://github.com/bem/project-stub/blob/master/.enb/make.js#L78-L98

webtehnology
#webtehnology
20 февраля 2017

Собираю через gulp. А в файле make.js этот кусок кода такой же, как по ссылке

gulp.task('build', () => {
    return bundler('*.bundles/'+ project + '/')
        .pipe(builder({
            css: bundle =>
                bundle.src('css')
                    .pipe(stylus())
                    .pipe(postcss([
                        autoprefixer({
                            browsers: ['ie >= 10', 'last 2 versions', 'opera 12.1', '> 2%']
                        }),
                        postcssUrl({ url: 'inline' })
                    ]))
                    .pipe(csso())
                    .pipe(concat(bundle.name + '.min.css')),
            js: bundle =>
                merge(
                    gulp.src(require.resolve('ym')),
                    bundle.src('js').pipe(filter(f => ~['vanilla.js', 'browser.js', 'js'].indexOf(f.tech))),
                    bundle.src('js').pipe(filter(file => file.tech === 'bemhtml.js'))
                        .pipe(concat('browser.bemhtml.js')).pipe(bemhtml())
                )
                    .pipe(uglify())
                    .pipe(concat(bundle.name + '.min.js')),
            tmpls: bundle =>
                bundle.src('bemhtml')
                    .pipe(concat('any.bemhtml.js'))
                    .pipe(bemhtml())
                    .pipe(concat(bundle.name + '.bemhtml.js')),
            html: bundle => {
                const bemhtmlApply = () => toHtml(bundle.target('tmpls'));
                return gulp.src(bundle.dirname + '/*.bemjson.js')
                    .pipe(bemhtmlApply());

            }
       }))

       .on('error', console.error)
       .pipe(debug())
       .pipe(gulp.dest(file => path.dirname(file.path)));       
});
tadatuta
#tadatuta
21 февраля 2017

Проблему сборки клиентских шаблонов с помощью gulp подтверждаю, будем чинить:
https://github.com/bem/project-stub/issues/239

zxqfox
#zxqfox
22 февраля 2017

А точно, как временное решение, нельзя так:

const wrap = require("gulp-wrap");

    // ...
    bundle.src('js').pipe(filter(file => file.tech === 'bemhtml.js'))
        .pipe(concat('browser.bemhtml.js')).pipe(bemhtml())
        .pipe(wrap([
            'modules.define("BEMHTML", [], function(provide) {',
            '    <%= contents %>',
            '    provide(BEMHTML);',
            '});'
        ].join('\n')))
    // ...
webtehnology
#webtehnology
4 марта 2017

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

tadatuta
#tadatuta
6 марта 2017

@webtehnology будет в ближайшее время. можно следить за https://github.com/bem/bem-xjst/issues/375

zxqfox
#zxqfox
11 июля 2017