Zależności Node.js są zbyt duże

10

Ostatnio zacząłem grać w node.js.

Teraz każdy samouczek dotyczący węzła mówi, że należy zacząć

npm init

a następnie powiedzmy, że potrzebujesz standardowej struktury serwera, wybierz ekspresową:

npm install express

ale wtedy będziesz potrzebować wielu innych rzeczy, do których jesteś przyzwyczajony ze światów takich jak ASP.NET.

Mówię o silnikach szablonów (jade) i pre-procesorach arkuszy stylów (SASS).

A potem mówią ci: „zainstaluj gulp / chrząstek!

A to oznacza instalowanie gulp, node-sass i gulp-sass i gulp-uglify, a może kilka naprawdę fajnych rzeczy (tsd lub babel, markdown itp.) ...

Ale wszystkie są ciężkie dla twojego dysku i projektu. Nie szukaj ani chwili, a możesz łatwo znaleźć 100 MB + dysku dla tego projektu (który jeszcze się nie zaczął!), Nie wspominając o ponad 10000 plikach, ponieważ każdy moduł węzła ma swoje własne zależności, bez względu na to samo zależność jest używana przez inny moduł. I to jest bardzo trudne do przeniesienia gdziekolwiek, nie mówiąc już o serwerze internetowym.

Czy coś brakuje? Nie sądzę, że jest możliwe, aby tak wiele pochwał otrzymano w środowisku węzła, dopóki istnieje tak wyraźna wada. Czy oczekuję zbyt wiele (mimo wszystko starałem się korzystać z wielu narzędzi jednocześnie), czy jest coś trywialnego znanego weteranom Node, aby to obejść?

Lub Yaniv
źródło
2
całkowicie się zgadzam, byłem zaskoczony widokiem drzewa npm dla niektórych projektów typu front-end. Wydaje mi się, że w świecie .net masz to samo, ale wszystkie są skompilowane do plików binarnych, więc nie zauważasz
Ewan
2
Niestety, to nie jest konkretne i możliwe do odpowiedzi pytanie, więc prawdopodobnie zostanie wkrótce zamknięte. Mogę ci powiedzieć, że 1) podczas gdy wszystkie te dodatkowe narzędzia są do czegoś przydatne, małe projekty po prostu nie potrzebują większości z nich 2) wszystkie inne frameworki programistyczne o podobnej funkcjonalności będą miały podobną ilość rzeczy (wystarczy spojrzeć przy pobieraniu JRE lub .NET), jedyną różnicą jest to, ile potrzebujesz, jest częścią „domyślnej” dystrybucji i ile musisz znaleźć w innych pakietach 3) 100 MB na twoim urządzeniu
deweloperskim
1
@Ixrec oczywiście jest odpowiedzialny, właśnie to zrobiłeś (lub próbowałeś) :). Ale potem mogę argumentować twoje twierdzenia: 1) nie musi to być mały projekt - rozważ projekt z kilkoma widokami z własnymi plikami js i arkuszami stylów. to wystarczy, abyś chciał mieć sass, cssnano i uglify. wystarczająco, abyś chciał wyrazić ekspresję, jadeit i trochę więcej. 2) Miałem przyzwoity projekt .net, który nie stał się tak ciężki (i nigdzie tak wielu plików). 3) być może współczesna maszyna deweloperska bierze to z łatwością, ale to również waży na serwerze, a to trochę bardziej niepokojące. Czy się mylę?
Lub Yaniv
2
@OrYaniv Rzeczywiście, jesteś w pewnym sensie dowodem na to, że mam rację: jest to rodzaj problemu, który można omówić , ale nie ma na nie odpowiedzi, ponieważ jest on zbyt szeroki i zbyt mocno zależy od dokładnie tego, jakie projekty wykonujesz i jakie zależności wydajesz się potrzeba. Nawiasem mówiąc, dyskusje na czacie są w porządku . Lub na Quora.
Ixrec
3
Witamy w cudownie rozdętym świecie „wszystko albo nic” node.js, który w rzeczywistości nie jest łatwiejszy i nie lepszy niż cokolwiek, czego używałeś wcześniej.
Traubenfuchs

Odpowiedzi:

4

Niedawny problem z lewym padem jest doskonałym przykładem problemu z tą tendencją w Węźle. Kiedy polegasz na zbyt wielu rzeczach, wszystkie z nich są podatne na ka-pow, utrudniają debugowanie twojego projektu, a nowicjuszowi trudniej zrozumieć funkcjonowanie języka.

Teraz dobrzy programiści Node.js wiedzą, jak pisać minimalistyczne aplikacje, jeśli chodzi o zależności. Im mniej rzeczy zależy od Ciebie - tym lepiej. Chcesz podciągnąć struny w lewo? Zakoduj to w pomocniku, jest to 11 linii kodu ze spacjami. Chcesz numerować rzędy ciągów? Wpisz to, to mniej niż 100 linii kodu.

Nawet w przypadku bardziej skomplikowanych zadań, takich jak zarządzanie projektami, sugeruję trzymać się plików Makefiles, podczas gdy twój projekt jest dość prosty - chrząknięcie i przełykanie są naprawdę, bardzo przydatne w gigantycznych projektach, które wymagają dużego wysiłku. Ale na blogu SPA? Napisz plik Makefile, zajmuje to 5 minut i wiesz, jak to działa.

Pokusa, aby po prostu przeglądać npm za każdym razem, gdy trzeba napisać 3 linie kodu, jest świetna, ale należy się jej opierać, gdy tylko jest to uzasadnione. Nie dołączaj jQuery, jeśli masz 3 manipulacje DOM, nie używaj kątowej dla tej statycznej strony promocyjnej, nie używaj ekspresowej dla uproszczonego serwera. Ale kodujesz CMS? Musisz być szalony, aby nie używać pakietów takich jak jQuery, podkreślenie i co nie. Pracujesz z 10 typami kolekcji, 3 dbami i cały czas je odpytujesz? Byłbyś szalony, aby nie używać podkreślnika i kilku innych. Pomyśl tylko: „czy zaoszczędzę wystarczająco dużo czasu, instalując ten pakiet?” lub „Czy nie mogę tego kodować przez około pół godziny?”

BorisStoyanovv
źródło
2
Z drugiej strony, czy tak naprawdę potrzeba 100 wierszy kodu JavaScript, aby dodać numery wierszy do ciągu?
Robert Harvey
Hahahah, tak naprawdę nie myślałem o realistycznej implementacji numeracji linii, ponieważ ... Naprawdę nie widzę potrzeby istnienia takiej rzeczy, nie mówiąc już o pakiecie.
BorisStoyanovv
Prawdopodobnie możesz przeciąć tę linię na pół, po prostu wyrażając opinię. To naprawdę prosty problem do rozwiązania. (I jest to jedna linijka w języku podobnym do schematu i prawdopodobnie pyton teraz, kiedy o tym myślę)
Shayne