Added support for YModules with backward compatibility#606
Added support for YModules with backward compatibility#606
Conversation
|
Great thing! 👍 I'm already want to get it ;-) |
|
@rakchaev How and when to use it? |
|
@arikon
We write js files from own bem levels with YModules.
|
|
@rakchaev But how do you use it? You just write own project blocks using |
There was a problem hiding this comment.
Realization -> Implementation
It will be more correct (here and in the other files)
|
@arikon Yes. We just write own project blocks using ym. Like blocks of |
@zxqfox The rule is simple: this code is harder to understand for the ordinal reader than simple I don't support some of the decisions made for |
There was a problem hiding this comment.
These style @module comments are not used in bem-bl
There was a problem hiding this comment.
I've found usage of @module comments in bem-bl:
./blocks-common/i-jquery/__debounce/i-jquery__debounce.js: * @module i-jquery__debounce
./blocks-common/i-jquery/__decodeuri/i-jquery__decodeuri.js: * @module i-jquery__decodeuri
./blocks-common/i-jquery/__observable/i-jquery__observable.js: * @module i-jquery__observable
./blocks-common/i-geolocation/i-geolocation.js: * @module i-geolocation
./blocks-common/i-ecma/__json/i-ecma__json.js: * @module i-ecma__json
./blocks-common/i-ecma/__function/i-ecma__function.js: * @module i-ecma__function
./blocks-common/i-ecma/__string/i-ecma__string.js: * @module i-ecma__trim
./blocks-common/i-ecma/__object/i-ecma__object.js: * @module i-ecma__object
./blocks-common/i-ecma/__array/i-ecma__array.js: * @module i-ecma__array
./blocks-common/i-menu/i-menu.js: * @module i-menu
./blocks-common/i-bem/i-bem.js: * @module i-bem
./blocks-common/i-bem/__internal/i-bem__internal.js: * @module i-bem__internal
./blocks-common/i-bem/__dom/_init/i-bem__dom_init.js: * @module i-bem__dom_init
./blocks-common/i-bem/__dom/i-bem__dom.js: * @module i-bem__dom
./blocks-common/b-menu-vert/__trigger/b-menu-vert__trigger.js: * @module b-menu-vert
./blocks-common/i-system/i-system.js: * @module i-system
|
@rakchaev What do you think of |
|
@arikon Yes, we can replace it. |
|
@arikon I'm for wrapping that block to |
|
bem-bl and bem-core are separate code bases. I think there is no need to focus on future syncronization (that would not happen at all). 13.02.2015, 19:50, "Alexej Yaroshevich" notifications@github.com:
Отправлено из мобильной Яндекс.Почты: http://m.ya.ru/ymail |
|
@dfilatov could you review plz? there are doubts that we can accept this pr as is |
|
I think you shouldn't want this ) It's just increasing the entropy, nothing more |
|
@zxqfox blocker for what? |
|
@dfilatov For mergin' |
|
If I were maintainer I wouldn't merge |
|
@dfilatov Thank god you are not ;-) upd Ловлю себя на мысли, что я бы тоже не влил ;-) Что если унести на отдельный уровень эти правки и подключать уровень только при необходимости? В отдельную библиотеку уносить тоже вариант, но в bem-bl такое не принято. |
|
@arikon what do you think? |
|
@dfilatov Дима, прокомментируешь реализацию? 19.02.2015, 16:47, "Filatov Dmitry" notifications@github.com:
Отправлено из мобильной Яндекс.Почты: http://m.ya.ru/ymail |
|
polite ping @dfilatov |
|
@zxqfox I can't add to what I said anything else. |
|
@dfilatov Дима, причины идеологические или технологические? |
|
I like this feature. +1 for merge. |
|
+1 |
|
@rakchaev @corpix @Andre-487 вы можете описать, про какие именно «преимущества модульной системы» идет речь, с учетом того, что:
Что мешает начать, учетом перечисленного выше, начать использовать modules.define('my-block', function(provide) {
provide(BEM.DOM.decl('my-block', {···});
});На мой взгляд, ничего кроме увеличения сложности и запутанности кода, этот pr (речь про пользователей внутренних библиотек) не привносит. Пример про «запутанность»: // islands/blocks/button.js
BEM.DOM.decl('button', {
doSomething() {
···
}
});
// prj/blocks/my-block1.js
modules.define('my-block1', ['i-bem__dom'], function(provide, BemDom) {
provide(BemDom.decl('my-block1', {
doSomethingMore() {
//! этот код может нормально работать —
// блок `button` задекларирован вне ym и код его `decl`'а уже выполнился к этому моменту!
this.findBlockInside('button').doSomething();
}
}));
});
// prj/blocks/my-block2.js
modules.define('my-block2', ['i-bem__dom'], function(provide, BemDom) {
provide(BemDom.decl('my-block2', {
doSomethingMore() {
//! а вот тут никто `my-block1` в массив зависимостей (2й аргумент define) не добавил —
// вообще не факт, что этот код будет работать
this.findBlockInside('my-block1').doSomethingMore();
}
}));
}); |
|
Я не знаю о каких преимуществах идет речь, но этот фикс позволяет начинать писать блоки в рамках ymodules, и постепенно переводить с i-bem из bem-bl на i-bem из bem-core. Про внутренних пользователей я ничего не знаю, но как-то странно это обсуждать в публичном репе. upd Пример хорош для «порезался об ножницы — нужны царапки», имхо. |
|
Да, действительно смысл в облегчении миграции с bem-bl на bem-core. |
Я готов поспорить, что количество людей которые про это даже не задумаются (не то, чтобы попытаются понять), будет соразмерима с количеством людей которые не понимают зачем писать
Возможно я не понимаю, но в чем упрощение? Проекту прямо сейчас можно начать использовать ym: modules.define('my-button', function(provide) {
provide(BEM.DOM.decl('my-button', {···});
});Чем драматически помогает наличие |
Да нет смысла об этом спорить. Просто есть люди, которым надо переезжать, а есть те, которых и так все устраивает.
Тем, что когда все блоки будут описаны таким образом, можно будет, грубо говоря, сделать - |
@zxqfox тебе ли не знать, что заворачивание блоков в модульную систему — это самая простая задача из тех, с которыми придется столкнуться при миграции с |
Да это понятно, просто без таких правок (даже самых простых) переезжать постепенно становится невозможно. Можно, впрочем, вдобавок сделать в bemhtml: |
|
Просто я не думаю, что можно взять и просто заменить |
|
Привет!
Инициализация блоков (запуск
Привносит пользователям библотеки:
Инициализация всех блоков выполнится только после резолва всех объявленных модулей, у которых в зависимостях есть |
|
В итоге, чтобы использовать на своем проекте модульную систему |
Added possibility to use YModules in js files from own bem libraries based on bem-bl.