{"action":"created","issue":{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/588","labels_url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/588/labels{/name}","comments_url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/588/comments","events_url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/588/events","html_url":"https://github.com/bem/bem-forum-content-ru/issues/588","id":105695199,"number":588,"title":"Раздельные зависимости для технологий","user":{"login":"Andre-487","id":1009104,"avatar_url":"https://avatars.githubusercontent.com/u/1009104?v=3","gravatar_id":"","url":"https://api.github.com/users/Andre-487","html_url":"https://github.com/Andre-487","followers_url":"https://api.github.com/users/Andre-487/followers","following_url":"https://api.github.com/users/Andre-487/following{/other_user}","gists_url":"https://api.github.com/users/Andre-487/gists{/gist_id}","starred_url":"https://api.github.com/users/Andre-487/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Andre-487/subscriptions","organizations_url":"https://api.github.com/users/Andre-487/orgs","repos_url":"https://api.github.com/users/Andre-487/repos","events_url":"https://api.github.com/users/Andre-487/events{/privacy}","received_events_url":"https://api.github.com/users/Andre-487/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/labels/deps.js","name":"deps.js","color":"bfe5bf"},{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/labels/technologies","name":"technologies","color":"c7def8"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-09-09T22:17:04Z","updated_at":"2015-09-10T12:46:38Z","closed_at":null,"body":"Я не встречал обсуждения по этому вопросу, поэтому открою новую тему.\r\n\r\nКажется, что для достижения цели собирать в бандл только нужные сущности, было бы неплохо разнести декларации зависимостей по конкретным технологиям. Уже сейчас это возможно для клиентского JS при использовании технологии [enb-modules/deps-with-modules](https://github.com/enb-make/enb-modules#readme), но совсем круто было бы иметь возможность делать так и в серверном JS (сейчас это обычно \"привы\"), и в BEMHTML/BH, и в CSS.\r\n\r\nЕсть технология deps-by-tech, но лучше было бы декларировать зависимости там, где это нужно непосредственно - в коде технологий и еще лучше там, где это возможно, получать зависимости явно через DI. Мне кажется, YModules в клиентском JS - очень удачный пример."},"comment":{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/comments/139225245","html_url":"https://github.com/bem/bem-forum-content-ru/issues/588#issuecomment-139225245","issue_url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/588","id":139225245,"user":{"login":"Andre-487","id":1009104,"avatar_url":"https://avatars.githubusercontent.com/u/1009104?v=3","gravatar_id":"","url":"https://api.github.com/users/Andre-487","html_url":"https://github.com/Andre-487","followers_url":"https://api.github.com/users/Andre-487/followers","following_url":"https://api.github.com/users/Andre-487/following{/other_user}","gists_url":"https://api.github.com/users/Andre-487/gists{/gist_id}","starred_url":"https://api.github.com/users/Andre-487/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Andre-487/subscriptions","organizations_url":"https://api.github.com/users/Andre-487/orgs","repos_url":"https://api.github.com/users/Andre-487/repos","events_url":"https://api.github.com/users/Andre-487/events{/privacy}","received_events_url":"https://api.github.com/users/Andre-487/received_events","type":"User","site_admin":false},"created_at":"2015-09-10T12:46:38Z","updated_at":"2015-09-10T12:46:38Z","body":"Речь как раз о том, чтобы реализовать технологию без магии и вытягивания зависимостей из существующего кода. Нужно попробовать придумать способы объявить зависимости, как это делается при DI.\r\n\r\nДля CSS, например, можно использовать кастомное правило:\r\n```css\r\n@bemRequire: b-page, b-page_theme_islands, b-page__content_type_text;\r\n\r\n.block {\r\n  border-radius: 3px;\r\n}\r\n```\r\n\r\nДля YM можно попробовать решить задачу разными способами, например, сделать возможность на уровне самих YM объявлять кастомные декларации, определяемые плагинами, и написать плагин, который разбирает зависимости предметной области BEM:\r\n```js\r\nmodules.define(\r\n['i-bem__dom', {block: 'b-page', elems: ['content', 'header'], mods: {type: 'my'}}], \r\nfunction (provide, BEMDOM, CombinedBPage) {\r\n  \r\n}\r\n);\r\n```\r\n\r\nИли для i-bem использовать независимый DI:\r\n```js\r\nmodules.define(['i-bem__injector'], function (provide, Injector) {\r\n    var BEMDOM = Injector.get('i-bem__dom_type_my'); // Отсюда забирать зависимость\r\n});\r\n```\r\n\r\nДля BH можно использовать что-то такое:\r\n```js\r\nbh.declareDeps('block');\r\n```\r\n\r\nНу и так далее.\r\n\r\nВообще, видно, что все выглядит совершенно неконсистентно, но это вызвано тем, что технологии сами по себе имеют очень отличающийся синтаксис или набор инструментов."}}