@Alk90
php, mysql, jquery, css, html, api

Npm, Webpack, NodeJs с чего начать?

Помогите с чего начать изучение или работу, я даже не понимаю как правильно задать вопрос чтобы начать понимать хотя бы суть.

Я последние 3 года работал с собственными проектами на php, делал все начиная от лендинга до REST API и работой с RabbitMQ, Redis, MemCached, jQuery, Базы данные. Высоконагруженный проект. И все успешно работает, быстро.

Но все это я писал без использования фреймворков типа laravel и уж тем более без использования nodeJs, Webpack, npm и тому подобные плюшки.

Но сейчас очень часто появляется задача прикрутить какой-то модуль (вроде админки LTE) и у меня просто стопор. Потому что все это написано с использованием препроцессоров, десятка зависимостей ради простейшей функции, сотни плагинов которые компилируются через webpack или совсем не понятно через что они компилируются. И я просто не могу прикрутить это к своему проекту, который имеет функционал в десятки раз больше этого шаблона админки, но при этом, в которой использовано просто миллион строк кода.

Подскажите с чего мне начать это все понимать? И нужно ли? Один ли я такой? Где я пропустил тот момент когда всё стало основываться за миллионах строк зависимости, которые контролировать практически невозможно. А там же должны быть конфликты библиотек, плагинов. Так же их дублирование или дублирование плагинов с одинаковым функционалом

Самая большая проблема, это когда в инструкции к проекту написано "выполните npm i" и в итоге получается куча ошибок, которые неизвестно откуда взялись и неизвестно как исправить.

Прошу выразить хотя бы свою мысль относительно данной проблемы. Может все действительно так сложно что я никогда не разберусь и стоит завязывать с разработкой. Или может наоборот все просто при принципу "установил windows и не думай как она работает"?

Получился не вопрос, а некий крик души. Просто вся разработка, на сколько я сейчас понимаю, превратилась в скачивание плагинов. Да даже в php, если влезть в какой laravel, то там столько зависимостей, что подсев один раз на какой-то модуль, что-то изменить будет просто невозможно.
  • Вопрос задан
  • 697 просмотров
Пригласить эксперта
Ответы на вопрос 3
@deliro
Фронт развился в какую-то неправильную сторону, это правда
Вкатиться на фронт очень сложно, это тоже правда. Причём, необоснованно сложно.

Я бы выделил два пути, как можно въехать во всё это:
1. Создать приложение на Vue или React по туториалам, затем разобраться, как и зачем оно всё
2. Разобраться как и зачем оно всё (aka Vanilla JS), потом заняться реактами

Имхо, вариант №2 предпочтителен и более прост, потому что на варианте №1 есть огромный шанс застрять, никогда не разобравшись, как оно работает а при любых нешаблонных ошибках поднимать лапки.

Что здесь нужно понимать:
1. Есть разные версии ES (ecmascript), они все обратносовместимые. Программист может писать на любой версии, какая ему нравится. Обычно берут последнюю стабильную

2. Для проекта обычно есть две версии ES: та, на которой пишут программисты и та, которая исполняется в браузере или в ноде (об этом позже). Например, программист пишет на ES8, а код транслируется на ES5. Это позволяет использовать последние предсмертные хрипы писки моды JS при этом запуская всё на древнейшем говне вроде IE11. Перегонкой кода из JS/TS одной версии в JS другой версии занимается транспилятор: babel / esbuild / swc

3. Новые версии JS содержат расширения стандартной библиотеки, которых нет в старых браузерах (например Array.from, Object.entries и т.п.). Эти дырки затыкают полифиллы, они же shims. Самая популярная дырозатыкательная машинка — corejs

4. Весь код очевидно не пишется в одном файле и может быть написан на TypeScript (он же TS), JSX/TSX (реактовый синтаксис). Всё это нужно собрать в один или несколько файлов, то есть скомпоновать. Этим занимается bundler: часть webpack / esbuild / spark / etc.

5. Этот же парень отвечает за то, чтобы та тысяча библиотек, что лежит в node_modules, попала в итоговый условный main.js, но не целиком, а только то, что используется. Последнее называется tree shaking (типа навозную кучу node_modules потрясли как дерево, что упало — то не нужно)

6. (то самое "позже) Код может исполняться не только в браузере пользователя, но и на сервере без браузера вообще. Это нужно для SSR aka Server Side Rendering. SSR — это такой глобальный вонючий костыль для SEO. Дело в том, что стандартные SPA приложения содержат один DOM элемент, куда цепляется всё остальное приложение вроде реакта или вью, которое уже содержит всю вёрстку прямо в JS. Но не все поисковики согласны с таким подходом и некоторые (не будем показывать пальцем на яндекс) не умеют выполнять JS и индексируют только тот самый единственный DOM элемент, который существует на этапе отдачи страницы в браузер. Это уже потом к нему JS движком дорисовывается весь остальной сайт. Соответственно, сайт индексируется от слова "никак", а некоторым это важно. Например, когда SPA — это не админка. Для этого есть два выхода: страницы, важные для SEO, рендерить чем-то не-реактовым или сделать SSR — делать за яндекс работу на сервере (на ноде), представляя в уме, что у нас есть DOM и браузер (на самом деле нет), на выходе получать начальное состояние HTML, отдавать его клиенту (браузеру или поисковому роботу), а JS'ом её т.н. "гидрировать", иными словами — оживлять.

7. webpack отвечает за всё вот это сверху в том или ином виде. Это такой кухонный комбайн, в который вкидываешь кучу хлама в одном виде, а получаешь другую кучу хлама в другом виде.

Начать советую с parceljs, который сильно проще в освоении, чем webpack. И на написании кода максимально без библиотек.
Ответ написан
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Я backend разработчик. Типовая задача забрать из SQL и выложить JSON на URL. Время от времени становится интересно -- что там, на другой стороне проволоки) Например попробовать самому отрендерить в браузере что я туда посылаю.
Начинал с представления о DOM, как работает XMLHttpRequest, как интегрируется SVG и как рисуют на canvas.
В webasm и webgl потыкал, но не осилил.
В хобби front поделках остановился на yarn для управления зависимостями и rollup для сборки.
Ответ написан
@disgusting-dev
"Один ли я такой" - нет, все такие, сложные конфиги и строки кода пишутся не одним человеком и не за один день. Плюс есть когнитивная ошибка, что эти строки написаны умными людьми - такое может быть не всегда и большие размеры могут быть неоправданны

webpack- берет структуру проекта и представляет ее в виде дерева файлов, идет по файлам и делит их на разные группы по их расширениям (js в одну группу, css в другую) - и дальше к каждой группе применяет свой набор изменений. Все эти плагины нужны для абстрактного удобства - пользователя(сжатые файлы, стили доступные для всех браузеров, код доступный для старых браузеров и т.д.) или разработчика (логи, метрики, анализаторы и пр.)

npm - ну да, он такой, с большим кол-вом дубликатов. Справедливости ради, такими являются все открытые пакетные менеджеры в зависимости от активности сообществ языков, тот же pip у питона или rust crates могут напоминать npm. Сильные дубликаты со временем уходят, т.к. появляется общий кодстайл сообщества, где все со временем стремятся использовать только одну библиотеку

Я бы советовал идти от простого к сложному - если какой-то шаг можно пропустить, то пропускай. например, webpack идет пре-конфигурированный для многих фреймворков, его можно не касаться, некоторые фреймворки имеют удобный CLI, который дает возможность сразу предустановить самые нужные библиотеки и больше ничего не трогать там

Ну или можно иначе - начать с голого html-js-css и потом постепенно прикручивать к ним сверху инструменты, параллельно понимая, для чего они все нужны
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы