🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.javascript
Article #51780

Re: dlaczego firstChild oraz childNodes[0] mam undefined?

#51780
From: Borys Pogoreło
Date: Thu, 23 Mar 2017 20:46
88 lines
5210 bytes
Dnia Thu, 23 Mar 2017 10:41:11 +0100, Cezary Tomczyk napisał(a):

>> A jaki miałeś problem z Gulpem? Grunt faktycznie nie jest zbyt elastyczny z
>> uwagi na deklaratywne podejście, ale w Gulpie możesz napisać prawie
>> wszystko, to w końcu zwykły JS + strumienie.
> 
> No właśnie dlatego, że mam dostępny Promise, to Gulp nie jest mi potrzebny.

A nie widzę, byś go używał. Do tego to by jeszcze bardzo zaciemniło Twoje
rozwiązanie, zwłaszcza jakbyś musiał zsynchronizować kilka promises. Nie
wspominając już o zabawie z łapaniem wyjątków, itd. Ze strumieniami jest
znacznie łatwiej, do ich scalania i synchronizowania masz gotowe narzędzia,
a ich użycie to 1-2 linijki.

> To żadna kombinacja. Przypatrz się temu dokładnie. Bierzesz pakiet npm i 
> używasz go całkiem normalnie: wejście -> wyjście. 

A po drodze odpalasz binarkę CLI eslint, musisz ją skonfigurować,
samodzielnie obsłużyć błędy i do tego zupełnie nie widać, co jest wynikiem
działania tej funkcji. Coś tam sobie leci w pętli i nie bardzo wiadomo, co
się dzieje i gdzie szukać efektów (co to jest "report" i jak go czytać? co
to jest "formatter" i czemu pojawia się dopiero na końcu, choć nazwa
wskazuje na coś potrzebnego w trakcie procesu?). A całość jest długa na dwa
ekrany. To nie jest proste rozwiązanie. Idealizujesz je, bo jesteś autorem.
Proste rozwiązanie to jest wziąć garść plików, złączyć je w jeden strumień,
wrzucić w eslint z konfiguracją i coś zrobić ze strumieniem wyjściowym. I
nie przejmować się zanadto obsługą błędów, bo robi to za nas narzędzie.

> Osobiście, po jakimś czasie doszedłem do wniosku, że Grunt/Gulp za 
> bardzo ograniczają mnie i w zasadzie zdefiniowanie i napisanie kroków do 
> build-a jest banalnie proste:

Ja mam nieodparte wrażenie, że gulpa nawet nie spróbowałeś na dobre, bo
wcześniej stworzyłeś to swoje rozwiązanie.

> 1. Definiujesz co chcesz osiągnąć.
> 2. Dobierasz sobie pakiet npm.
> 3. Piszesz kilka linijek kodu, by przekazać parametry do pakietu npm i tyle.

No popatrz, opisałeś gulpa ;)

Hint: nikt Ci nie broni używać pakietów npm w procesie gulpa. Prościej
jednak jest trzymać się konwencji.

> * Usuwam niepotrzebną zależność od Grunt-a/Gulp-a

To nie jest argument.

> * Nie muszę czekać, aż autor pakietu dla Grunt-a/Gulp-a uaktualni mi go

Pakiety npm też nie zawsze są aktualne.

> * Nie muszę nic hackować, bo albo korzystam z gotowych pakietów npm 
> (jeśli są wystarczające), albo piszę sam.

A czym jest hackowanie, jak nie tym ostatnim? ;)

Nawiasem mówiąc pakiety gulp nie są jakieś przesadnie skomplikowane. 

gulp-babel to prosty wrapper na moduł npm i wygląda tak:
https://github.com/babel/gulp-babel/blob/master/index.js

> * Do konkretnego zadania mogę wybrać jakikolwiek pakiet npm, spełniający 
> moje wymagania. Mając Grunt-a/Gulp-a muszę brać pod uwagę to, że pakiet 
> był specjalnie dla G/G.

Nie musisz, ale tak jest wygodniej.

> Do minusów:
> * Trzeba przeczytać i zrozumieć kod :D
> * Więcej nie pamiętam, ale możesz dopisać kolejne punkty tutaj ;-)

* Tworzysz rozwiązanie in-house, z którym musisz sobie radzić sam
* Musisz w wielu miejscach wynajdować koło na nowo
* Uzyskujesz strasznie rozwlekły kod, bo patrz wyżej

>> Widzę, że w komentarzach Ci napisali w sumie to samo ;)
> 
> Zdania są podzielone i to jest normalne. Nie oczekuję tego, iż G/G 
> zostanie porzucony czy nagle wszyscy przestaną z tego korzystać. 
> Zaprezentowałem swój punkt widzenia.

Na blogaskach generalnie wypada chwalić w komentarzach, nawet takie
wynaturzenia jak JSS ;)

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Technical Details
Message-ID: <ixjpuri5gaab.urjkl0tpanih$.dlg@40tude.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.promontel.net.pl!not-for-mail
References: <oaaiu9$jmk$1@news.icm.edu.pl> <oaauv5$1i7t$1@csiph.com> <5d210841-ac34-4a0b-9981-9fe8d5e61d4c@googlegroups.com> <1qyr04lt73a9k.2i4h5jx0p963$.dlg@40tude.net> <a5966894-febc-4a31-ba2c-12eb96499852@googlegroups.com> <20170316120955.4c2fcf01@pe.regionet.pl> <f86bfc66-ce12-4009-9ad7-46fdb248d93d@googlegroups.com> <slrnocojql.2ov.wojciech.bancer@pl-test.org> <07b85c99-5512-4bf8-a85b-32e2693318a2@googlegroups.com> <1bw0p3palg9q0$.1iffa42jnbl49.dlg@40tude.net> <oaql97$10e8$1@csiph.com> <1exqgczs770q5.1ncnughms5d0a.dlg@40tude.net> <oats0s$8as$1@csiph.com> <t2bme4paw8if.1ufmvhjyj9qn1.dlg@40tude.net> <ob057n$1vkd$1@csiph.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.promontel.net.pl!not-for-mail
From: Borys Pogoreło <borys@pl.edu.leszno>
Newsgroups: pl.comp.lang.javascript
Subject: Re: dlaczego firstChild oraz childNodes[0] mam undefined?
Date: Thu, 23 Mar 2017 21:46:26 +0100
Organization: snafu
Lines: 88
Message-ID: <ixjpuri5gaab.urjkl0tpanih$.dlg@40tude.net>
References: <oaaiu9$jmk$1@news.icm.edu.pl> <oaauv5$1i7t$1@csiph.com> <5d210841-ac34-4a0b-9981-9fe8d5e61d4c@googlegroups.com> <1qyr04lt73a9k.2i4h5jx0p963$.dlg@40tude.net> <a5966894-febc-4a31-ba2c-12eb96499852@googlegroups.com> <20170316120955.4c2fcf01@pe.regionet.pl> <f86bfc66-ce12-4009-9ad7-46fdb248d93d@googlegroups.com> <slrnocojql.2ov.wojciech.bancer@pl-test.org> <07b85c99-5512-4bf8-a85b-32e2693318a2@googlegroups.com> <1bw0p3palg9q0$.1iffa42jnbl49.dlg@40tude.net> <oaql97$10e8$1@csiph.com> <1exqgczs770q5.1ncnughms5d0a.dlg@40tude.net> <oats0s$8as$1@csiph.com> <t2bme4paw8if.1ufmvhjyj9qn1.dlg@40tude.net> <ob057n$1vkd$1@csiph.com>
NNTP-Posting-Host: ead108.neoplus.adsl.tpnet.pl
Mime-Version: 1.0
X-Trace: thunar.promontel.net.pl 1490301972 13404 83.22.167.108 (23 Mar 2017 20:46:12 GMT)
X-Complaints-To: abuse@promontel.net.pl
NNTP-Posting-Date: Thu, 23 Mar 2017 20:46:12 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.14.1pl
X-fnord: obey.
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit