Задать вопрос
@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, то там столько зависимостей, что подсев один раз на какой-то модуль, что-то изменить будет просто невозможно.
  • Вопрос задан
  • 698 просмотров
Подписаться 6 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 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 и потом постепенно прикручивать к ним сверху инструменты, параллельно понимая, для чего они все нужны
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Wanted. Москва
от 60 000 до 120 000 ₽
Wanted. Санкт-Петербург
До 120 000 ₽
Pixel Point Москва
от 1 500 до 2 000 $