Article View: pl.comp.lang.javascript
Article #51780Re: dlaczego firstChild oraz childNodes[0] mam undefined?
From: Borys Pogoreło
Date: Thu, 23 Mar 2017 20:46
Date: Thu, 23 Mar 2017 20:46
88 lines
5210 bytes
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-mailReferences:
<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