Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var row = new $my_app_row
var row = $my.app.row.make()
Наелся сборщиков типа webpack, где подключение стилей и шаблонов происходит из js, даже если собственно js модулю не нужен.
@import, в шаблонных движках, например jinja-подобных, зависимости инструкциями типа {% import 'blocks.html' %}. Приведённый вами пример компонента тоже имеет зависимость $mol_block, однако она нигде не указана явно. Видимо предполагается что при сборке её зависимость будет находиться в глобальной области и тогда всё нормально разрезолвится. Философия такая — писать полностью изолированные модули. До появления систем сборки тоже все писали в глобальной области и приятного было мало.Модули без единой строчки джаваскрипта это CSS и шаблоны. В CSS зависимости указываются конструкцией import, в шаблонных движках, например jinja-подобных, зависимости инструкциями типа {% import 'blocks.html' %}.
Приведённый вами пример компонента тоже имеет зависимость $mol_block, однако она нигде не указана явно.Вообще-то куда уж более явно — в месте использования. Именно для этого используется специальная нотация с символом доллара вначале — это глобальный идентификатор.
Философия такая — писать полностью изолированные модули. До появления систем сборки тоже все писали в глобальной области и приятного было мало.Плохая философия. Изоляция модулей не решает проблему конфликтов имён. От слова вообще. Конфликты имён решаются исключительно пространствами имён. И у тех, кто использовал пространства имён, проблем не было ни раньше, ни сейчас. А вот дебагом изолированного кода заниматься «одно удовольствие».
Как в css-модуле через import прописать зависимость от js-библиотеки modernizr?
Привыкли к тому, что чтобы подключить какой-нибудь виджет, вам нужно подключать его стили, скрипты и шаблоны в трёх в разных местах в трёх различных нотациях.
Разве жизнь не заиграет красками в отсутствии рутины по регистрации каждого файла в каких либо списках?
Вообще-то куда уж более явно — в месте использования. Именно для этого используется специальная нотация с символом доллара вначале — это глобальный идентификатор.
Плохая философия. Изоляция модулей не решает проблему конфликтов имён. От слова вообще. Конфликты имён решаются исключительно пространствами имён.
А вот дебагом изолированного кода заниматься «одно удовольствие»
Никак, а зачем? Что вы собрались делать с JS-модулем внутри CSS?
Как раз таки при помощи webpack все ресурсы модуля упаковываются в один файл и подключать потом нужно только его. Зависимости указываются во входной точке — в JS и это нормально.Архив или лапшекод с CSS в JS? А точка входа в виде JS — это кривизна.
Возможно. Но она также заиграет красками неявного поиска зависимостей и возможными ошибками связанными с этим. Откуда брать модуль A, если у меня два разных модуля B/A и C/A?У них будут имена $B_A и $C_A и лежать они будут в ./B/A и ./C/A
То есть по сути это транслируется в импорт другого модуля? Тогда это тоже самое, только синтаксис другой.Нет, это ни во что не транслируется — сборщик берёт граф зависимостей и сериализует его. И да, это то же самое, только без дублирования (использование — зависимость, import — зависимость).
О каких именах речь? Модуль экспортирует только то что ему положено, код-пользователь может переименовать экспортируемый символ, если такой уже имеется.О глобальных именах. А разные имена одного символа в разных местах приложения — усложнение поддержки на ровном месте.
Мне сорсмапы помогают.Оно-то тут при чём? Как вы через консоль сможете обратиться к нужному вам объекту? Никак. Вам необходимо искать нужный исходник, ставить там точку останова, довести исполнение приложения до этой точки и только тогда вы сможете получить доступ к изолированным переменным. А я просто вобью нужный путь в консоли, которая мне ещё и автодополнением будет помогать.
Архив или лапшекод с CSS в JS?И SVG+PNG в base64 не забудьте. Какая разница во что превращается собранный и минифицированный код? Все всегда смотрят на сорцы.
Нет, это ни во что не транслируется — сборщик берёт граф зависимостей и сериализует егоЯ и говорю, это указание на другую зависимость. Импорты это ведь тоже лишь вершины графа.
О глобальных именахА зачем нужны глобальные имена?
А разные имена одного символа в разных местах приложения — усложнение поддержки на ровном месте.Ага, как разработчик модуля назвал экспортируемый символ, так его и используй. А если 2 символа с одинаковыми именами — используй полный путь к модулю, как в джаве. Нет уж спасибо. Все современные IDE умеют работать с такими импортами и рефакторить соответствующий код.
Как вы через консоль сможете обратиться к нужному вам объекту?Я дебажу точно также как вы написали, ставлю брейкпойнт в нужном месте кода, происходит остановка, где есть доступ ко всему окружению. ЧЯДНТ?
Если так сильно хочется указать зависимость на внешний модуль в CSS (для того чтобы webpack добавил его в свой граф зависимостей) то это можно сделать допилив css-loader.Да костылей-то везде можно напилить. Суть в том, что зависимость должна быть от модуля, а не конкретного файла. Какие там файлы из modernizr надо подклчюать, чтобы всё заработало? Какие-то скрипты? Может ещё стили какие-то? А меня вообще должно волновать внутреннее устройство стороннего модуля?
И SVG+PNG в base64 не забудьте.Давайте уж совсем в маразм не впадать?
Какая разница во что превращается собранный и минифицированный код? Все всегда смотрят на сорцы.Мы вроде про модули в исходниках говорили, а не про собранные пакеты модулей. Да даже и при сборке, минификация — пустая трата времени.
А зачем нужны глобальные имена?А зачем вообще нужны идентификаторы?
Ага, как разработчик модуля назвал экспортируемый символ, так его и используй. А если 2 символа с одинаковыми именами — используй полный путь к модулю, как в джаве. Нет уж спасибо. Все современные IDE умеют работать с такими импортами и рефакторить соответствующий код.А мозг программисту они тоже рефакторят? Простой пример: перенос кода из одного модуля в другой — IDE поправит имена зависимостей? Другой пример: вы редактируете 10 файлов, в половине из них какая-то сущность названа одним образом, в другой половине — другим. Сможете не запутаться где что писать, чтобы обратиться к ней? А в яве, да, впали в другую крайность.
Я дебажу точно также как вы написали, ставлю брейкпойнт в нужном месте кода, происходит остановка, где есть доступ ко всему окружению.Это не также как я. Я имею простой и быстрый доступ к любому состоянию программы из любого места программы и даже из консоли. А вы, да, вынуждены ставить точки останова.
А ещё автономные модули удобнее тестировать, внешние модули можно замокать (полностью или частично).Это с изоляцией никак не связано. Это к инверсии зависимостей. Но и без инверсии зависимостей всё замечательно мокается.
import $ from '$';
import JSON from 'JSON';
import _ from '_';
import Q from 'Q';
import moment from 'moment';
export {$, JSON, _, Q, moment};
import {$, _} from 'common';
$('#app').hide();
Webpack ProvidePlugin: как не писать простыню import/require в начале javascript модуля