Skip to content

modules.define recursion problem #1446

Closed
@doochik

Description

@doochik

Наткнулся на проблему из-за вот этого места https://github.com/bem/bem-core/blob/v3/common.blocks/i-bem/__dom/i-bem__dom.js#L1563

Каждый блок делает define i-bem__dom_init, соответственно при резолве получается большая рекурсия и большой стек. В моем проекте от этого пострадал живой пользователь и ферма автотестов. Firefox'ы в определенном окружении (win/linux) падают с 'too much recursion'

Хочется отсюда рекурсию убрать. Пока запатчил вот так (да, storedDeps некрасиво передается по ссылке)

(function() {

var origDefine = modules.define;
var storedDeps = [];
var iBemDomInitDefined = false;

modules.define = function(name, deps, decl) {
    origDefine.apply(modules, arguments);

    if (name !== 'i-bem__dom_init' && arguments.length > 2 && ~deps.indexOf('i-bem__dom')) {
        storedDeps.push(name);
        if (!iBemDomInitDefined) {
            iBemDomInitDefined = true;
            modules.define('i-bem__dom_init', storedDeps, function(provide, _, prev) {
                provide(prev);
            });
        }

    }
};

})();

Есть идеи как это исправить? @narqo @dfilatov

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions