Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uncaught Error: Module "textarea": can't resolve dependence "input" #1565

Closed
4ok opened this issue Jun 29, 2015 · 12 comments
Closed

Uncaught Error: Module "textarea": can't resolve dependence "input" #1565

4ok opened this issue Jun 29, 2015 · 12 comments
Assignees
Labels

Comments

@4ok
Copy link

4ok commented Jun 29, 2015

Textarea не подтягивает в сборку технолгию js блока input, хотя в deps он прописан

@blond
Copy link
Member

blond commented Jun 29, 2015

Скорее всего это особенности сборки. У js технологии блока textarea есть зависимость от js технологии блока input: https://github.com/bem/bem-components/blob/v2/common.blocks/textarea/textarea.deps.js#L10-L13.

Чтобы они попали нужно проделать ряд дополнительных манипуляций при сборке: https://github.com/bem/bem-components/blob/v2/.enb/make.js#L73-L94

@Guria
Copy link
Contributor

Guria commented Jun 29, 2015

Как раз недавно думал что за js-js такой в конфиге ENB. Зачем такое усложнение?

@narqo
Copy link
Member

narqo commented Jun 29, 2015

Как раз недавно думал что за js-js такой в конфиге ENB. Зачем такое усложнение

Это было сделано, чтобы при подключении на страницу только textarea не приезжали шаблоны и CSS блока input. По факту, textarea нужен только js-блока input в качестве baseBlock'а.

@blond а нет в планах (хотя бы на 2015-й :) начать делать честные depsByTech, чтобы результат сборки технологией deps, был не просто список БЭМ-сущностей, а полный граф зависимостей tech → tech?. Все текущие deps'ы при этом могут выражаться через { block='a', tech='*' } → { block='b', tech='*' }

@Guria
Copy link
Contributor

Guria commented Jun 29, 2015

На сколько я понимаю сейчас это не работает и все равно приезжает весь блок? И при этом усложняется корректная сборка в сторонних проектах. Сама сборка тоже не очень документированы.

@Guria
Copy link
Contributor

Guria commented Jun 29, 2015

И если уж нужна такая хитрая зависимость корректнее было бы сделать в обычных shouldDeps зависимость от технологии js блока input.

@blond
Copy link
Member

blond commented Jun 29, 2015

хотя бы на 2015-й

ты хотел сказать 2016-й? ))

а нет в планах начать делать честные depsByTech

В очень слабом приоритете есть — bem-sdk-archive/bem-deps#2. Прямо сейчас пишем спецификацию. Пока там всё сыро, план работ — bem-sdk-archive/bem-deps#3. Дальше спецификации в ближайшее время вряд ли что-то сделаем.

На сколько я понимаю сейчас это не работает и все равно приезжает весь блок?

Нет, сейчас работает правильно. Проблема только в сложности сборки любых depsByTech зависимостей.

И если уж нужна такая хитрая зависимость корректнее было бы сделать в обычных shouldDeps зависимость от технологии js блока input.

Что ты имеешь ввиду?

@Guria
Copy link
Contributor

Guria commented Jun 30, 2015

Что ты имеешь ввиду?

Я имел ввиду, что зависимость блока textarea, по идее, должна быть описана так:

{
    mustDeps : { block : 'i-bem', elems : 'dom' },
    shouldDeps : [
        {
            mods : ['disabled', 'focused']
        },
        'control',
        { tech : 'js', block : 'input' }
    ]
}

Но как раз для этого и нужны "честные" depsByTech. Уточнение, что зависит именно технология js блока textarea избыточно, и требовалось только для выделения этого особого случая и сборки с помощью js-js.

Нет, сейчас работает правильно. Проблема только в сложности сборки любых depsByTech зависимостей.

Ага, понял. Понятно, что честные depsByTech гораздо более трудоёмки, чем дополнительные шаги для сборки, но...

Это было сделано, чтобы при подключении на страницу только textarea не приезжали шаблоны и CSS блока input. По факту, textarea нужен только js-блока input в качестве baseBlock'а.

Стили и так бы не приехали, т.к. подключаются только по модификатору. Экономия на шаблонах кажется смехотворной: input.bemhtml, input__box.bemhtml и input__control.bemhtml.
Мне кажется усложнение сборки ради одного блока textarea и экономии 29 строк шаблонов в особом вырожденном случае (не используется блок input) неоправданно.

@blond
Copy link
Member

blond commented Jun 30, 2015

Но как раз для этого и нужны "честные" depsByTech. Уточнение, что зависит именно технология js блока textarea избыточно, и требовалось только для выделения этого особого случая и сборки с помощью js-js.

Не совсем так. Такая запись предполагала бы, что любая технология этого блока зависит от js.

И если говорить об честных зависимостях и «умной» сборке, то сборка бы решила, что чтобы корректно работала скажем css, то ей нужно ещё собрать js и как-то их склеить.

Мне кажется усложнение сборки ради одного блока textarea и экономии 29 строк шаблонов в особом вырожденном случае (не используется блок input) неоправданно.

Наверное, соглашусь :)

@narqo, что скажешь?

@Guria
Copy link
Contributor

Guria commented Jun 30, 2015

Такая запись предполагала бы, что любая технология этого блока зависит от js.

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

@blond
Copy link
Member

blond commented Jun 30, 2015

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

Сборка не бывает абстрактной, она всегда по технологиям. Поэтому, если мы не указываем явно технологию, это равносильно tech: '*'.

Если в результате мы хотим получить только декларацию БЭМ-сущностей, то * -> js и js -> js дадут одинаковый результат.

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

@narqo
Copy link
Member

narqo commented Jul 1, 2015

Наверное, соглашусь :)
@narqo, что скажешь?

Нормально, давайте напишем, только добавим комментарий, что это не «от хорошей жизни», а потому что нет нормальной поддержки depsByTech.

@qfox
Copy link
Member

qfox commented Aug 16, 2016

Нашли комментарий в textarea.deps.js со ссылкой на это issue.

В bem-deps это выражается как и не требует изменений сборки:

{
    tech : 'js',
    shouldDeps: [
        { block: 'input' }
    ]
},

При такой декларации в сборку css-файла, равно как и других технологий, не попадут файлы блока input. Только js.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants