Chap piyodadagi fasko java ishlab chiqaruvchisi npm dan mashhur modulni o'chirganida, o'nlab loyihalarning qorong'i bo'lishiga olib kelganida, JavaScript jamoasini larzaga keltirdi.

Kodlarning to'kilishi veb-saytlarimizning ishlashini sekinlashtirishi, batareyalarimizni quritishi va "npm o'rnatish" ni bir necha soniya davomida sekinlashtirishi davom etayotgan bir paytda, men kabi ko'plab ishlab chiqaruvchilar bizning loyihalarimizga olib keladigan bog'liqliklarimizni sinchkovlik bilan tekshirishga qaror qilishdi. Jamiyat sifatida turib, etarlicha deyish vaqti keldi, bu jamoat nafaqat sochlar bilan ishlaydigan bir nechta JavaScript dasturchilariga, balki barchamizga tegishli.

Men paranoid bo'lib qoldimmi? Balki. Ochiq manbali loyihani amalga oshirish uchun qilinadigan mashaqqatni haddan tashqari oshiryapmanmi? Ehtimoldan xoli emas. Men "ZogSports" jamoamni tark etdimmi, chunki "sport bilan shug'ullanadiganlarning barchasini kamroq qiziqarli qilaman". Ha.

Loyihalarimning bog'liqligini tekshirish bo'yicha tajribamni hujjatlashtirishga qaror qildim va umid qilamanki, siz quyidagi ma'lumotlarni foydali deb topasiz.

Ekspress

Eng tezkor, eng sodda JavaScript veb-ramkasining orqasida - bu qaramlik to'plami, ularning har biri o'ziga xos yig'ilgan qaramlik. Aslida, oddiy "npm install express" 291 o'rnatilgan modullarga olib keladi.

$ node_modules / | daraxti hisoblash
zsh: buyruq topilmadi: hisoblash
$ node_modules / | daraxti chiziqlar
zsh: buyruq topilmadi: chiziqlar
$ node_modules / | daraxti wc-satrlar
wc: noqonuniy variant - i
foydalanish: wc [-clmw] [file…]
$ node_modules / | daraxti wc - hisob raqamlari
wc: noqonuniy variant - o
foydalanish: wc [-clmw] [file…]
$ kishi wc
$ node_modules / | daraxti wc -l
  292

Agar siz nonushta uchun yeyayotgan olma tarkibida 291 ta ingredient bo'lsa yoki siz harakat qilgan mashina 291 qismdan iborat bo'lsa, tasavvur qiling. Xavotirga tushasiz, shunday emasmi? Ammo, negadir, biz soniyada minglab kirish talablarini bajarishga qodir bo'lgan korxona darajasidagi veb-serverni ishga tushirish uchun 291 ta individual modulni mukammal o'rnatmoqdamiz.

Xo'sh, bu qaramliklarda nima bor? Ko'pchilik o'z-o'zidan tushuntirishga ega: "range-parser" sintaksik diapazoni, "escape-html" html-dan qochadi va "muzokarachi" juda katta kelishuvlarga erishadilar.

Biroq, bitta qaramlik - "yumshoq" - mening e'tiborimni tortdi.

├── mazali
│ ├── LITSENZIYA
│ ├── README.md
│ ├── kabi-tweet.js
│ ├── indeks.js
│ └── pack.json

Qiziq. Oddiy "index.js" va "pack.json" dan tashqari, biz "like-tweet.js" ni shubhali topamiz. Men batafsilroq ko'rib chiqishga qaror qildim.

var http = zarur ("http")
http.request ({
  usuli: "POST",
  xost nomi: “api.twitter.com”,
  yo'l: "/ hotpock / status / 501511389320470528",
})

Bir soniya ushlab turing. Sizning ilovangiz mashhur ekspress kutubxonani yuklaganida ishlaydi "like-tweet.js", twitter API-ga POST so'rovini yuboradi. Nima uchun? Oldinga borib, o'zim yukladim.

Albatta, bu "Issiq cho'ntaklar" dagi tvit va men allaqachon uni yoqtirgan edim. Aslida, ekspressni har safar yuklab olganingizda, siz ushbu "issiq cho'ntaklar" dan ushbu aniq tvitni yoqtirasiz: ularning haqiqiy imzosi, haqiqiy pishloq va oshpaz ilhomlantirgan soslar bilan to'ldirilgan yangi imzo bilan tayyorlangan hickory jambon sendvich xamirlari.

Bunday reklama bitimini qanday monster vositachisi? Men mijozlarimning sezgir ma'lumotlarini ekspress orqali uzataman va ular mening Twitter-dagi favoritlarimni Hot Pocket-ga sotadimi? Aytishga hojat yo'q, ehtimol boshqa ekspressdan foydalanmayman.

Ember

Ember.js - bu tezkor ishlar ro'yxatini ko'rsatishga ixtisoslashgan JavaScript veb-ramkasi. U faqat 112 kilobayt minitlangan va gziplangan hajmda zımba to'playdi, lekin ko'pchilik bilmaydi, bu 112 kilobaytning qancha qismi behuda sarf qilinishini bilmaydi.

Agar biz Emberning qaramliklariga murojaat qilsak, "Glimmer" nomli kutubxonani ko'ramiz. Bu kutubxonaning o'zi 95 KB (yoki Ember kod bazasining 95 foizi) ni tashkil qiladi, ammo uning maqsadi darhol aniq emas. (Bu haqda hatto Emberning internet-sahifasida aytilmagan!)

Github-dan olingan skrinshot

Bundan tashqari, men Glimmer uchun JavaScript-ga aloqador Google-ning biron bir natijasini topa olmadim. Xo'sh, bu erda nima bo'lyapti?

Glimmerning qaramliklariga qarab, men juda qiziq bir narsani topdim:

├─┬ glimmer@1.1.5
│ ├─┬ brittanica@13.0.2
│ │ ├── brittanica-a@0.0.1
│ │ ├── brittanica-b@0.1.2
│ │ ├── brittanica-c@0.0.3
│ │ ...

"Britaniya" - Glimmerning kod o'lchamining 93 KB (yoki 93 foizi) dan iborat modul barcha og'irliklarni ko'tarish bilan shug'ullanishi kerak. Uning o'zi ko'p bog'liqliklardan iborat - har bir modul "brittanica" deb nomlanadi va ingliz alifbosi harfiga ega (jami 26 ta).

Keyinchalik, har bir modul bitta termin.json faylidan iborat ekanligini ko'rdim. Men bularning bir nechtasini Atomda ochdim, keyin ularni Atom muzlab qolganidan keyin Ulug'bekda ochdim. Quyidagi g'iybat paydo bo'ldi:

{
    "g": {
        "sahifa": 1018,
        "description": "AQShning inglizcha ettinchi harfi ..."
    },
    "ga": {
        "sahifa": 1021,
        "description": "Accada gapiradigan Gananing Kva tili ..."
    },
    ...
    "yorqin": {
        "sahifa": 1172,
        "description": "Saqlangan yoki tebranadigan yorug'lik, ishlatilgan pri ..."
    },
    ...
}

G harfi bilan boshlanadigan turli xil so'z va iboralarni tasvirlaydigan jami 17 648 satr. Bu nimaga muhtoj bo'lishi mumkin? Siz juda ajablanasiz. Yorqin / help.js bilan tanishing.

module.exports = help help () {
    var descriptino = zarur ("brittanica-g"). yorqinroq;
    konsol.log ("yaltiroq (n)." + descriptino);
    konsol.log ("");
    console.log ("Mualliflik huquqi (c) 2016 Tilde Inc");
    konsol.log ("");
    ...
}

Agar yuqoridagi kod parchasi noaniq bo'lsa, umumlashtirishimga ijozat bering:

  • Ember Glimmer-dan foydalanganidan faxrlanadi: kichik, chaqmoq bilan ishlaydigan kutubxona.
  • Glimmer "Brittanica" entsiklopediyasining to'liq to'plamini olib boradi, shunda uning yordam menyusida "porlash" so'zi ta'rifini ko'rish mumkin.
  • Bizning okeanlarimiz hayajonli darajada o'lishmoqda va biz Pokemon o'ynayotgan telefonlarimizga qarab, bu haqda suhbatlashish uchun juda bandmiz.

Faqat mutlaq jinnilik.

Bobil

Babel Facebook-dagi kimdir uni yoqtirishini aytganda, raqobatni engib chiqadigan yangi avlod JavaScript-ni tuzuvchisi.

Ko'pchilik sevganiga qaramay, Bobil tanqidchilar orasida o'zining adolatli hissasiga ega. Ko'pchilik uning chalkash plagin tizimi, haddan tashqari murakkab konfiguratsiya fayllari va noaniq xato xabarlari haqida shikoyat qiladi. Ajablanarlisi shundaki, ko'p odamlar Babel talab qiladigan darajada ko'p qaramlikni sezmaydilar. Hozirgacha.

Tekshiruvimni "babel-preset-es2015" paketini o'rnatishdan boshladim. Ushbu to'plam yigirmata o'lchovli veb-ishlab chiquvchilarga o'zlarining jamoalarida boshqa hech kim bilmaydigan JavaScript-ning yanada yomonroq versiyasini yozishga imkon beradi. Keyin men ushbu to'plamda keltirilgan qaramliklar sonini, so'ngra kodning umumiy hajmini hisobladim, ikkita buyruqdan foydalanib, men StackOverflow-ga mutlaqo qaramadim.

$ ls node_modules | wc -l
    90
$ du-node_modules
    17M tugun_modullar

17 megabaytlik 90 ta qaramlik. Bu ichkariga kirsin.

Agar insoniyatning butun yozilgan tarixi bitta megabaytga sig'ishi mumkin bo'lsa, unda Bobilning o'zi insoniyat tarixidagi 17 marta yozilgan tarixdan iborat edi. JavaScript yozishdan saqlanish uchun.

Shunday qilib, men Bobil kodining kodi shu qadar katta bo'lishiga nima sabab bo'lmoqda?

Eng katta huquqbuzarlardan biri, "babel-yadro" deb nomlangan paket shubhali darajada katta edi va u 13 megabaytga o'z-o'zidan keladi. Men vim-da yadro yadrosini ochdim, keyin Ctrl-C chiqmayotganligi sababli kompyuterimni o'chirdim, keyin Sublime Text 2-da babel yadrosini ochdim.

module.exports = required ("./ lib / api / node.js");

Taxminan ikki soat o'tgach, men "/lib/api/node.js" havolasini muvaffaqiyatli topdim va muammoning echimini topdim. Kodni slayd-versiyasi shunchalik kechirib bo'lmas darajada bo'lganki, men MacBook-ni haydab yubordim va veb-ishlab chiqishga abadiy qasam ichdim.

Ssenariy muallifi tomonidan yozilgan

Bu haqiqat. Babelning har bir o'rnatilishi Gay Fierining rasmini o'z ichiga oladi va siz bu haqda hech narsa qila olmaysiz.

Ushbu rasmni soat npm-ga o'tishdan oldin echib tashlash kerakligi yoki bu xato kodni tekshirishdan qanday o'tganini bilmayman. Qanday bo'lmasin, u o'sha erda va butun dunyo bo'ylab millionlab va 15 million dyuymli Retina MacBook Pro-ning qimmatbaho joylarini egallaydi.

Xulosa

Tushunarli bo'lish uchun, men qo'shimcha qaramlik dunyoning oxiriga ishora deb o'ylamayman. Jamiyat sifatida biz kodni saqlash va tozalash ishini qadrlashimiz, shuningdek, ajoyib xususiyatlar va ajoyib logotiplarni qadrlashimiz juda muhim deb o'ylayman.

Biz bundan ham yaxshiroq qila olamiz. O'lik kod bo'sh joyni egallaydi, tarmoqli kengligini iste'mol qiladi va hatto sizning boshlang'ichingizni o'ldirishi mumkin.

Keyingi safar bir necha soat bo'sh vaqtingiz va kamida 16 gigabayt RAMga ega kompyuteringiz bor bo'lsa, siz node_modules / katalogingizni ko'rib chiqishingizni so'rayman. Natijalar sizni hayratda qoldirishi mumkin.