Верно ли я понимаю суть webpack, таск-раннеров, requirejs и модулей?
Иными словами, похожего результата я добьюсь варварским методом, склеивая файлы без всяких модулей через gulp (инкапсулируя содержимое при помощи объектов). Верно?
В каком-то смысле да.Чтобы использовать модульный подход на клиенте, например, при помощи RequireJS, нужно его подключить, позволить ему отработать и засунуть в код страницы на лету нужные файлы.
Не обязательно, тот же вебпак создаёт самостоятельный бандл. Всё необходимое будет внутри.
Сравнения со стеком C/C++:
- модули это единицы компиляции (compilation unit). Настоящих модулей в C++ мы никак не дождёмся, так что это пока лучшая аналогия :); модули, написанные на языке, отличном от целевого JS (например на TypeScript или ES2015) подлежат компиляции; JS, являющийся результатом компиляции похож на объектный файл;
- вебпак похож на линковщик, с той разницей, что плюсовый линкер собирает в бинарник только то, что ему дают, а вебпак наоборот, может запрашивать компиляцию модулей (для чего существует концепция загрузчиков - loaders). Представьте, если бы линковщик просил компилятор С++ скомпилить нужный файл. Так ведёт себя вебпак;
- выходные большие файлы - бандлы - это вроде готовых lib файлов или бинарников. В них напихано много скомпилированных модулей, и их можно либо слинковать с чем-то еще (если это библиотека), либо запустить (если это бандл для загрузки на HTML-страницу);
- как линковщик (пусть и с возможностью запроса нужного модуля) не заменяет make, так и вебпак не заменяет таск-раннеров.
Примерно да. Только с третьим пунктом я не согласен:Возможно, именно поэтому именитые проекты, использующие все эти новомодные фичи, так яростно лагают в сравнении с обычными сайтами
Какие именитые проекты лагают? twitter? gmail? гугл- и яндекс-карты? Гугл-документы? Ведь нет же, хотя там богатая и сложная функциональность. Лагает dirty и facebook, потому что обвешаны кривой рекламой по самое не могу. Вот всякие баннерные сети с кривыми картинками, видео и JS-ом, написанным в 1997 году и тормозят.