Я в общем нашёл решение. Головной класс Framework наследуется от Singleton. Экземпляры отдельных классов (модулей) создаются в методе init класса Framework через new и сохраняются в свойства класса Framework. Модули общаются друг с другом только через фреймворк из любой части кода, например Framework::i()->file_system->get_contents( $file ). Таким образом, модули ничего не знают друг про друга. Если модуль при каких-либо условиях не должен загружаться, то он оборачивается в условие в методе init и экземпляр этого модуля не создаётся.
Очень странно, что мало кто разбирается в архитектуре и все дают ответы в виде "лозунгов" без конкретных примеров кода.
БЭМ - это не про CSS.
по БЭМ у вас темпплейт компонента (блока), например в PHP, должен лежать в одной папке с CSS/JS компонента. И вы могли этот код использовать повторно в других компонентах, динамически создавать и удалять эти компоненты на странице и так далее. Ключевая идея здесь: исключить дублирование кода на всех уровнях приложения.
Всё оказалось просто. В закрытом состоянии добавил в css overflow:hidden, height: 0. При этом в JS для получения высоты блока использовал свойство scrollHeight
Используйте Rollup JS. В отличии от вебпак и браусерифи, он собирает файлы без всякого мусора. В отличии от gulp include вы можете использовать синтаксис import, export es2015.
Две ошибки, первая \b - это граница слова, вам вообще не нужно это использовать. Вторая ошибка в том, что \w - это символьный класс [a-zA-Z0-9_] а вам нужен символьный класс [а-яА-Яa-zA-Z]
Правильный вариант:
var s = "abc русский текст".replace(/[а-яА-Яa-zA-Z]/g, function(v) {
return v.toString().toUpperCase();
});
alert(s);
Была такая же проблема, купил новый ПК на i7-7700K. Дак вот процессор я вам менять не советую.
Вам нужно памяти 16Гб с низкими таймингами, под систему винт SSD (рекомендую M.2 Samsung 960 Pro) и видеокарту класса GTX1060-1080