Я решил описать свой опыт в области аудита зависимостей моего проекта и надеюсь, что эта информация будет полезной.
Ember
Ember — это JavaScript-фреймворк, который специализируется на быстром создании todo-списков. У него неплохой размер в 112 килобайт в сжатом виде. Но большинство людей не знают о том, сколько из 112 килобайт тратится ни на что.
Если мы заглянем в зависимости эмбера, то увидим библиотеку под названием glimmer. Сама эта библиотека весит 95KB (или 85% кода эмбера), но ее назначение не сразу понятно (она даже не упоминается на сайте эмбера!).
Что ж, глядя на эту зависимость, я нашел кое-что весьма любопытное:
+-T glimmer@1.1.5
¦ +-T brittanica@13.0.2
¦ ¦ +-- brittanica-a@0.0.1
¦ ¦ +-- brittanica-b@0.1.2
¦ ¦ +-- brittanica-c@0.0.3
¦ ¦ ...«Brittanica» — модуль весом 93КБ, должно быть, выполняет всю тяжелую работу. Brittanica сама состоит из множества зависимостей: каждый модуль называется «brittanica» + суффикс с буквой английского алфавита (26 штук).
Ковыряясь дальше, я обнаружил, что каждый модуль состоит из одного файла terms.json. Я открыл его в Atom, затем открыл в Sublime, после того как Atom завис. Тарабарщина появилась на экране:
{
    "g": {
        "page": 1018,
        "description": "The seventh letter of the US English..."
    },
    "ga": {
        "page": 1021,
        "description": "a Kwa language of Ghana, spoken in Acc..."
    },
    ...
    "glimmer": {
        "page": 1172,
        "description": "A faint or wavering light, used pri..."
    },
    ...
}17,648 строк в общей сложности, описывающих различные слова и фразы, которые начинаются с буквы G. Кому на земле может понадобиться это? Ну, знакомьтесь, это glimmer/help.js:
module.exports = function help() {
    var descriptino = require("brittanica-g").glimmer;
    console.log("glimmer (n). " + descriptino);
    console.log("");
    console.log("Copyright (c) 2016 Tilde Inc");
    console.log("");
    ...
}
В случае, если приведенный выше фрагмент кода непонятен, позвольте мне подвести итог:
1. Эмбер гордится использованием модуля «glimmer»: маленькой, быстрой рендеринг-библиотеки.
2. «Glimmer» тянет часть энциклопедии Brittanica, просто чтобы вывести определение слова glimmer в меню «справка».
3. Наши океаны высыхают с пугающей скоростью, а мы все слишком заняты, играя в Покемонов на наших телефонах, вместо того, чтобы поговорить об этом. Просто безумие.
Babel
Babel является компилятором для новой версии JavaScript, который обыграл своих конкурентов, когда кто-то в Facebook сказал, что им Babel нравится больше.
Хотя люди любят Babel, он получил справедливую долю критики. Многие жалуются на его запутанную систему плагинов, чрезмерно сложные конфигурационные файлы и неясные сообщения об ошибках. Любопытно, но не так много людей заметили невероятное количество зависимостей, которые требует Babel.
Я начал свое расследование, установив пакет «babel-preset-es2015». Этот пакет позволяет двадцати с лишним веб-разработчикам в мире писать на новом, худшем варианте JavaScript, который никто в их команде не знает. Затем я подсчитал количество зависимостей, вносимых этим пакетом, а затем общий размер кода. Целых 90 зависимостей на общую сумму 17 мегабайт.
Если всю историю человечества удалось уместить в один мегабайт, то один Babel будет состоять как минимум из семнадцати летописных историй человечества. Но мне стало действительно интересно, что же делает Babel настолько большим?
Один из самых больших преступников — пакет под названием «babel-core» был подозрительно крупным — 13 мегабайт. Я открыл «babel-core» в VIM, потом перезагрузил компьютер, потому что сочетание Ctrl-C не работало, затем открыл «babel-core» в Sublime.
module.exports = require("./lib/api/node.js");Примерно через 2 часа, я успешно нашел /lib/api/node.js и понял суть вопроса.

Это правда. Каждая установка Babel включает в себя фотографию Гая Фиери, и вы ничего не можете с этим поделать.
Я понятия не имею, как эта ошибка прошла проверку кода. В любом случае, она там есть, и она занимает драгоценное место на миллионах и миллионах 15-дюймовых Retina MacBook Pro жестких дисках по всему миру.
Express
Позади самого быстрого, нежирного JavaScript веб-фреймворка скрывается куча зависимостей, каждая со своей кучей зависимостей. В самом деле, простой «npm install express» приводит к установке 291 модуля.
Итак, что же входит в список этих зависимостей? Многие самоочевидны: «range-parser» разбирает http range, «escape-html» экранирует HTML, а "negotiator" делает другие важные дела. Тем не менее, одна зависимость — «yummy» («вкуснятина») — привлекла мое внимание.
+-- yummy
¦ +-- LICENSE
¦ +-- README.md
¦ +-- like-tweet.js
¦ +-- index.js
¦ L-- package.json
Интересно. Помимо обычных index.js и package.json, мы находим подозрительный like-tweet.js. Я решил взглянуть поближе.
var http = require("http")
http.request({
  method: "POST",
  hostname: "api.twitter.com",
  path: "/hotpockets/status/501511389320470528",
})Секундочку like-tweet.js, который выполняется каждый раз, когда ваше приложение загружает популярную библиотеку Express, делает post-запрос к API Твиттера. Зачем? Я двинулся вперед и загрузил этот маршрут сам.

Конечно, это твит от Hot Pockets, и я уже добавил его в избранное. В самом деле, каждый раз, когда вы загружаете Express, вы добавляете в избранное этот твит от Hot Pockets. Какое чудовище заключило такую рекламную сделку? Я пропускаю конфиденциальные данные клиентов через Express, а они продают «добавление в избранное» в Hot Pockets? Разумеется, я не буду больше использовать Express.
Выводы
Хочу быть понятым — я не считаю, что внешние зависимости являются признаком конца света. Я просто думаю, что максимально важно, чтобы мы как сообщество начали заботиться о чистоте кода так же, как мы заботимся о крутых функциях и красивых логотипах.
Мы можем работать лучше. Мертвый код занимает пространство, съедает пропускную способность и может даже убить твой стартап.
Я призываю вас посмотреть внутрь вашей папки /node_modules в следующий раз, когда у вас будет несколько свободных часов, и компьютер с 16 гигабайт оперативной памяти. Результаты могут вас просто удивить.
Комментарии (116)
 - dim_s16.08.2016 12:18+8- Случай с express поразил меня больше всего.  - VasilioRuzanni16.08.2016 12:24+4- Ну, вы же не поверили, тому что написано в статье, правильно? :)  - stavinsky16.08.2016 12:29+11- Эм это что шутка все?)  - VasilioRuzanni16.08.2016 12:32+8- Само собой :) Даже в команде Ember сидят не настолько прагматики, чтобы тащить Британнику ради одного определения. Но с чувством юмора у автора все круто — такое еще надо было придумать :D 
  - zapolnoch16.08.2016 12:33- Т.е. вы поверили в Гая Фиери и Британнику и вас поразил только авто-твит?  - jakobz16.08.2016 13:47+38- Я вот, лично, поверил вообще всему, и реально пошел эту фотку искать. 
 
 В это реально несложно поверить. Такое ощущение что 95% процентов ноды делают конченные малолетние идиоты, причем специально делают не так как все, чтобы посердить папу. А 95% потребителей ноды и библиотек — это неизбалованные нормальным языком и библиотеками PHP-шники.
 
 Потому что если человек хоть на чем-нибудь кроме PHP писал в жизни, он реально не поймет предложение писать сервер на ноде. Ну реально — это же самое дно из всего что есть вообще (кроме может PHP того же) - Rathil16.08.2016 14:26+4- Сколько обиды, в одном то комментарии :)  - jakobz16.08.2016 23:04+7- Есть обида, да. Потому что мне приходится с этим говном пересекаться, из-за фронтенд-тулчейна (webpack, typescript, npm, и т.п.). Там деваться особо некуда. Сервер на C#. 
 
 И я в шоке от инженерной культуры вокруг node.js. Например, прилетают мажорные релизы библиотек с critical-багами. NPM недетерменировано раскладывает модули по папкам. Все это весит сотни мегабайт, и отжирает гигабайты памяти просто чтобы собрать 1 мегабайт JS-ников. Авторы библиотек ломают совместимость API по три раза за год. Я уж молчу что в NPM-2 папки в винде стереть нельзя было из-за длины имен, спасибо хоть это починили.
 
 На фоне .NET-а (в котором тоже местами адище) — от node волосы на жопе шевелятся. А если уж JS-ники склеить — уже проблема, то я не могу себе даже преставить что творится у тех кто сервера на ноде делает. - Dreyk16.08.2016 23:33- есть такое, я вот так привык к культуре кода в руби-сообществе, что прям офигел, когда открыл исходник какого-то npm пакета, а там ни одного коментария =) 
 - Zenitchik17.08.2016 00:01- Ага. Я хоть и JavaScript-ер, не люблю микромодули. Благо, пока ничего большого писать на nodejs не случалось, пока могу всё просматривать. А у нас-то во front-end'e всё по другому, чисто, аккуратно, без внешних зависимостей (требования — возможность работы в интранате), и в продакшене — пожато в небольшое количество файлов. 
  - vtulin17.08.2016 11:56- В качестве шутки и не очень: 
 - npm install -g rimraf
 Прекрасно справляется с удалением своих же длинных папок)
 
 
 - bohdan4ik16.08.2016 14:26+11- Осмелюсь вступиться за PHP. 
 
 Современный PHP это уже не тот язык, что был в далёком 2008. Здесь тоже есть кровавый энтерпрайз (привет, Симфони!) с декомпозицией всего и вся, с поддержкой статической типизации и хорошим пакетным менеджером.
 
 Конечно, можно писать и без фреймворков, по-старинке складывая всё в один файлик, но тут уж всё зависит от программиста. - impwx16.08.2016 14:56+2- Осмелюсь с вами поспорить. Прогресс действительно был, но большинство вещей из фрактала плохого дизайна по-прежнему актуальны. 
 
 Экосистема в целом напоминает «зону» Стругацких: поверх враждебной для пользователя среды выросла защита в виде Symfony и иже с ними, но когда приходится выходить за ее пределы, даже старые прожженые сталкеры нет-нет да и напорются на какой-нибудь нежданчик.- bohdan4ik16.08.2016 15:52- Я абсолютно согласен и не отрицаю, что у языка есть существенные недостатки, связанные с тяжёлым грузом легаси, но всё ведь ненастолько печально, как описываете это вы и в своей нише ему сложно найти конкурентов :) 
 
 К слову, о нежданчиках. В самом начале своей карьеры, помнится, я читал об этом нюансе, но случев «неправильного использования» было крайне мало и эта подробность забылась.
 
 > $var['smth'] = null;
 > isset($var['smth']) // false
 > array_key_exists('smth', $var) // true
 
 Как-то убил пару часов на отладку этого :) - dovg16.08.2016 20:29+4- Это вообще-то в документации описано (второй пример). 
 Удивительно, как много php программистов ни разу не читали мануал php.- bohdan4ik16.08.2016 21:51+1- Удивительно как много людей пытаются поставить себя выше других при малейшей возможности. 
 
 Удивительно как много людей не читают чужих сообщений.
 
 Наверное, нужно повторить.
 
 > В самом начале своей карьеры, помнится, я читал об этом нюансе
 
 Но за давностью ознакомления сей нюанс вылетел из головы.- bohdan4ik16.08.2016 22:07+5- Вроде бы, уже не первый год на Хабре, но всё не устаю поражаться русскоязычному коммьюнити. Все такие напыщенные и высокомерные, что стоит поделиться кусочком своих знаний (https://habrahabr.ru/post/307248/#comment_9738110) или раскаяться в незнании и забывчивости (https://habrahabr.ru/post/307822/#comment_9753478), как тебя тут же забросают фекалиями всех сортов и попытаются выставить дурачком. 
  - dovg17.08.2016 09:29-1- > В самом начале своей карьеры, помнится, я читал об этом нюансе 
 
 Но за давностью ознакомления сей нюанс вылетел из головы.
 
 Поэтому я и перечитываю мануалы время от времени. Человеческий мозг несовершенен.
 ПДД кстати тоже стоит перечитывать.- bohdan4ik17.08.2016 09:55+2- По-этому и я перечитываю документацию, время от времени. Но человеческий мозг несовершенен (как вы и сами сказали) и всё равно некоторые вещи забываются, а на некоторые, уже знакомые, не хочется тратить времени. 
 
 «Два часа» из моего сообщения, на самом деле, длились не более 20 минут (хотелось указать на драматизм ситуации с неочевидностями PHP), и, конечно же, я полез читать документацию. Нестоит осуждать людей, если не знаете всей их истории.
 
 
 
  - i-o16.08.2016 21:42- Вы считали, что isset() и array_key_exists() — это одна и та же функция? - bohdan4ik16.08.2016 21:45- Нет, что вы. Я не ожидал, что isset() вернёт false на установленное (хоть и в null) значение.  - Rathil16.08.2016 23:30- А Вас не смущает, что в SQL-е null != null? Конечно нет, это же описанно и Вы уже на это натыкались. 
 
 К чему это я? К тому, что все имеет свои нюансы и свои тонкости, вот для выявления этих аспектов и нужно читать книги и документацию.- wing_pin17.08.2016 15:18+1- Описание нюансов и тонкостей в документации не отменяет и не оправдывает ущербности дизайна и исполнения. 
 
 
 
 
 - symbix16.08.2016 17:23- Не очень актуальны, на самом деле. 
 
 Те неконсистентности, которые можно было исправить, не ломая обратную совместимость, исправили в PHP7.
 Остальное большей частью либо исправлено на уровне фреймворков/библиотек (что, кто-то вручную пользуется curl?), либо просто вкусовщина.
 
 
  - AlexMac16.08.2016 15:46+5- jakobz Хм, и что же не дно по вашему? Был как-то не коференции, где главный разработчик aviasales сказал, что они перешли на python с rails (потому-что каждый запрос кушал 300Мб памяти!!!), и когда его спросили почему не node.js, он сказал что node это г… но. Это не вы случаем были:)?  - Fedcomp16.08.2016 23:35- запрос? не может быть. Если мы берем допустим puma, то много воркеров живут в достаточно адекватных рамках оперативной памяти. 
 
  - movl16.08.2016 16:05+5- Ну реально — это же самое дно из всего что есть вообще - Достаточно аргументировано. Могу предположить, что найдется часть людей, которые будут скидывать статью в аргументы, так как тоже поверят, но не проверят. 
 Скрытый текст- 95% НОДЫ ДЕЛАЮТ КОНЧЕННЫЕ МАЛОЛЕТКИ-ИДИОТЫ 
 95% ПОТРЕБИТЕЛЕЙ НОДЫ ЖРУТ ГАВНО
 НОДА САМОЕ ДНО — НУ РЕАЛЬНО
 РЕАААЛЬНOOО000!!!!111
  
 
  - dim_s16.08.2016 13:39+1- Это ни о чем не говорит, зависимости тянут другие зависимости, надо проверять все дерево зависимостей, каждого модуля и т.д. 
 
 
  - pengyou16.08.2016 12:18- максимально важно, чтобы мы как сообщество начали заботиться о чистоте кода - Рынок решил, что и так сойдёт.  - pengyou16.08.2016 12:25+13...и так сойдёт  - 1nt3g3r16.08.2016 12:20+1- Если мы заглянем в зависимости эмбера, то увидим библиотеку под названием glimmer. Сама эта библиотека весит 95KB (или 95% кода эмбера) - Не 95%, а (95/112*100) = 85% 
  - VasilioRuzanni16.08.2016 12:30+1- На самом деле, забавно и круто (читал эту статью в оригинале). Кстати, автору тоннами сыплются комментарии по поводу того, что хоть где-то стоило упомянуть, что это стеб (ну, кроме Гая Фиери частично) — впрочем, может тогда не было бы так весело :) 
  - Strate16.08.2016 12:39+27- Взял на себя смелость проверить доводы в статье. 
 express (последний релиз 2 месяца назад) не ставит yummy.
 Поставил руками yummy (последний релиз 8 месяцев назад) — в нём нет like-tweet.js
 Поставил ember — он не ставит glimmer (или я не тот ember поставил), окей, ставлю glimmer (релиз год назад) — в нём нет brittanica
 Окей, смотрим babel-core. Есть вот такой коммит: https://github.com/babel/babel/commit/f36d07d30334f86412a9d2771880cb566a82a9b6
 Что-то похожее на правду. Открываем историю файла: https://github.com/babel/babel/commits/f36d07d30334f86412a9d2771880cb566a82a9b6/packages/babel-core/src/api/node.js
 Берём самую первую версию файла: https://github.com/babel/babel/blob/3ef9bffcc240e60085fbb120de07d884448fbea3/packages/babel-core/src/api/node.js
 В нём нет картинки.
 Итого — ни один довод из статьи я не смог подтвердить.
 Судя по всему статья — просто штука, не принимайте всерьёз :) - VasilioRuzanni16.08.2016 12:40+8- Ну вы уж заморочились, Шерлок)  - zapolnoch16.08.2016 13:27+22- В этом и есть смысл статьи — взять и заморочиться. Открыть наконец папку node_modules и посмотреть что в ней происходит. Чтобы история с left-pad больше не повторилась.  - VasilioRuzanni16.08.2016 14:14+2- Ну а кто с этим спорит — я про то, что и более поверхностного взгляда на статью достаточно, чтобы понять, что это стеб (для тех, кто использует эти инструменты, конечно же, хотя тема с твитом ну очень уж очевидная в любом случае). 
  - Nikelandjelo17.08.2016 00:48- И как это помогло бы с left-pad? Это как-то помогло бы предовратить какого-то левого разработчика удалить опубликованный пакет с npm? 
 
 
  - Bashkinator16.08.2016 13:27- Ну есть коммит, где картинка таки добавляется. Может thejameskyle просто поддержал шутку? :-) 
 
  - ekubyshin16.08.2016 13:39- читая статью, задумался о переходе на go вместо node, но потом все встало на свои места 
  - AccessGranted16.08.2016 14:38- На небольшом проекте, который мы сейчас разрабатываем 
 
 $ ls -l frontend/app/node_modules/ | wc -l
 840
 - Starche16.08.2016 15:49- npm настолько страшная вещь, что я тоже подумал, что это не шутки всё. Только про эмбер не поверил. Не, ну он же на фронтенде, там не может быть столько бесцельных байтов. Если бы не это, я бы принял статью за чистую монету.  - Lockal16.08.2016 16:35+2- I wanted to start a simple hello world app for AngularJS 2. 
 
 When I followed the instructions in the official quickstart the installation created 32,000 files in my project.
 
 I figured this is some mistake or I missed something, so I decided to use angular-cli, but after setting up the project I counted 41,000 files.
 
 Where did I go wrong? Am I missing something really really obvious?
 Источник. И это только фронтенд.- Starche16.08.2016 16:59- Ну это ж всё не тянется в браузер. Там стандартный набор адского количества зависимостей для разработки. Знаем, проходили. В статье же написано так, что мол 85% всего эмбера (из 112гзипнутых килобайт) — это энциклопедия британика.  - Lockal17.08.2016 11:22- Эмбер модульный, всё вполне можно было бы теоретически свалить на систему сборки и тесты, которые до клиента не дойдут, но при этом всё равно присутствуют в поставке эмбера по воле разработчиков. 
 
 Реальный пример: bower и многие другие пакеты npm имеют набор зависимостей, которые в определённый момент содержат пакет «wordwrap», который выставляет папку tests. А там рассказ Бертрана Рассела «In Praise of Idleness».
 
 - Apparently this module is quite popular with other NPM authors. I have 202 copies of «In Praise of Idleness» by Bertrand Russell on my computer 
 Занавес.
 
 
 
  - Shamov16.08.2016 17:02+4- Бриттаника спроектирована не по-нодовски. Нужно было для каждого слова сделать отдельный модуль. Чтобы тот, кому нужно определение только одного слова, зависел только от модуля с этим словом.  - alexkunin16.08.2016 17:15+2- Тогда модуль каждого слова в зависимостях должен иметь модули слов, составляющих его определение. Т.е. с любого слова можно потянуть по зависимостям всю Британику — это ж энЦИКЛопедия!  - Shamov16.08.2016 18:03- Такой вариант модуля должен быть доступен в качестве альтернативы простому. На тот случай, если кому-нибудь нужно вывести определение слова, сделав все слова кликабельными. 
 
 
  - angru17.08.2016 12:43+2- Из части про Ember куда-то пропал забавный кусок истории команд: 
 - $ tree node_modules/ | count zsh: command not found: count $ tree node_modules/ | lines zsh: command not found: lines $ tree node_modules/ | wc -lines wc: illegal option — i usage: wc [-clmw] [file …] $ tree node_modules/ | wc -countlines wc: illegal option — o usage: wc [-clmw] [file …] $ man wc $ tree node_modules/ | wc -l 292
  - yurash17.08.2016 13:33+2- Шутки-шутками, но на мой взгляд (хотя я в node.js/npm скорее новичок) примерно так дела и обстоят. Возникла у меня на днях не гипотетическая а реальная необходимость уменьшить размер node_modules. Начал с разбора зависимостей модуля request, нашёл и картинки, и папки test и «толстые» .md файлы и кривые .npmignore. Не понимаю, почему нет какой-нибудь штатной опции минификации для деплоя  - Ununtrium17.08.2016 16:49- Это же не для деплоя в любом случае. Не могу представить людей, которые заливают весь node_modules в продакшн.  - yurash17.08.2016 17:25- не совсем понял что значит «Это же не для деплоя в любом случае»? Node.js крутится на сервере, обрабатывает запросы, использует в своей работе ряд модулей из node_modules. Есть Backend-As-A-Service платформа(ы), которые предоставляют разработчику возможность использовать node.js, но налагают различные ограничения и квоты, в частности на общий размер кодовой базы, вместе с node_modules. Вот и приходится извращаться, в ручном режиме просеивать. Может я какой-то очевидный простой путь не знаю, поделитесь если есть?  - Ununtrium18.08.2016 12:27- Эм, в статье по-моему говориться про npm для фронтэнда (как минимум Ember)? Драма в том, что если ты не используешь node.js на бэкэнде, c npm все равно придется иметь дело или, еще хуже, с каким-нибудь bower. Ну и там вообщем-то знаешь какие файлы тебе нужны и выдергиваешь их из node_modules. 
 С бэкэндом: захотели ноду — нате, тут я считаю все честно.
 
 
  - an9eldust17.08.2016 21:03- Возникла у меня на днях не гипотетическая а реальная необходимость уменьшить размер node_modules. 
 Связанная с чем?
  - DenVdmj18.08.2016 03:13- К тому же npm дублирует зависимости всегда устанавливая их в подкаталоги. Очень сильно увеличивает размер корневого node_modules, и порой, при очень большой вложенности делает невозможной установку модулей под win. Кому такая бредовая идея могла придти в голову? 
 В общем по этому поводу добавили npm dedupe — удаляет дубли и может уменьшить глубину вложенности каталогов node_modules.- Zenitchik18.08.2016 09:36- Говорят, замысел был в том, чтобы иметь возможность каждому модулю поставить нужную ему версию зависимости, если разные модули зависят от разных версий одного и того же модуля. Получилось — что получилось… 
 Вложенность, кстати, не мешает, npm как-то справляется. А вот штатными средствами винды потом хрен удалишь. - DenVdmj18.08.2016 17:08- Ну это хороший и понятный замысел, и, например, LuaRocks тоже это умеет, но он держит в папках с именем модуля подпапки с номером версии. 
 
 
 
  - tamtakoe17.08.2016 14:29- Я начал свое расследование, установив пакет «babel-preset-es2015». Этот пакет позволяет двадцати с лишним веб-разработчикам в мире писать на новом, худшем варианте JavaScript, который никто в их команде не знает. 
 Тонко подмечено. К сожалению, это не шутка. И пользуются этим недоразумением куда больше 20 человек
  - dolphin4ik17.08.2016 18:48-2- Я не пойму, а каким образом я закачивая express делаю что-то с твитом? 
 Твитор должен быть в консоли npm? или как?
  - metaprogressor17.08.2016 19:22- Бывает. Я в только что устанновленном Wordpress в SQL базе в таблице wpha_options нашел 2 мегабайта текстового мусора. К этой таблице постоянно идут 100500 запросов как от самого Вордпресса, так и от разных плагинов. Теперь ясно почему вордпресс так тормозит.  - lifestar22.08.2016 12:40- Ну разберись там со своим мусором, потому что после установки WP, таблица wp_options весит ~ 96 KiB 
 
  - maxlips18.08.2016 19:32-3- Да простят меня за гифку 
 
   - grossws18.08.2016 20:00+3- Простили бы, если бы она была под спойлером.  - maxlips18.08.2016 20:19+1- Всегда было интересно, а где это правило написано?  - grossws18.08.2016 20:47- Кроме формальных правил самого хабра есть ещё куча неформальных вещей. Начиная от netiquette (который несколько устарел, но более-менее применим) и заканчивая неформальными правилами конкретного сообщества. 
 - Например, в https://habrahabr.ru/info/help/other/ есть пункт про хабраэтикет. Базовая вещь, описанная ещё в netiquette, — уважайте чужое время. Как думаете, хорошо ли грузится 1.9 MiB при пингах ~1 s по GPRS? 
  - grossws18.08.2016 20:48- И не рекомендую повторять данный опыт активнообсуждаемой теме, кроме как в качестве хабрасуицида. 
  - Ununtrium19.08.2016 12:51+1- Большинству не нравятся картинки где что-то мелькает и дергается. Офигеть, да? 
 
 
  - stavinsky19.08.2016 20:49+2- А можно для непонятливых, что вы хотели донести? оно мелькает и я не могу уловить смысл. Редко нпм использую что бы понять) 
 
 
 
 
 
 
           
 







stavinsky
Вот интересно, эта статья — частитично реклама sublime или мне показалось? Аж 2 упоминания что только он спас.
kill из соседней консоли не пробовали?) Первый раз такое слышу что бы комп перегружали из-за vim в котором ctrl-c не сработал.
Ну а по делу, интересно обстоят ли так дела только с npm или в composer, pip, gem(подставить нужное) та же история. Спасибо за статью
stavinsky
Блин надо было читать теги)
Sild
А чего его рекламировать? Те, кто пробовали открыть несколько метров текстовыми редакторами, знают как печально это может закончится. И сублайм — один из немногих, кто это стойчески переносит. Комментарии автора внесли свою каплю юмора «для тех, кто в теме», не более.
stavinsky
Когда я писал коммент, я еще не видел тегов )
mihmig
2002-й год, Visual Fox Pro 6.0, Windows 98, 16 МБайт ОЗУ
Спокойно открывается текстовый файл на 100 МБайт в режиме редактирования.
Напьются смузи, напрограммируют мышкой, а потом у людей текстовый редактор зависает…
Fox_exe
nano на ARM девайсе с 32 метрами оперы… Спокойно ковыряюсь в гигабайтных логах одной кривой софтины…
mva
Более того, я делаю то же самое на MIPS, и… в VIM!
// просто оригинальный автор статьи загадил вим кучей бандлов-плагинов, которые имеют ту же самую, описанную самой статье проблему :)
kahi4
Я полагаю, что шутка тут была про то, что он не смог выйти из VIM, а не что VIM завис.
DartMedved
best comment :)
stavenko
Я позанудствую…
Исходник здорового человека крайне редко больше 1000 строчек. Поэтому у меня вим настроен со всеми возможными свистоперделками и работает быстро пока не попадется такая вот загогулина.
А потом да — если резет не нажать — день программирования потерян.
asolntsev
Да ладно! А что, там нет плагина автосохранения?
Я не нажимал Ctrl+S уже лет 7 — с тех пор, как пересел на Intellij IDEA. Всё само сохраняется. День программирования никогда не будет потерян.
stavenko
Это была ирония — вим висит, работать невозможно.
w4r_dr1v3r
Notepad++ вот кто стоически переносит что угодно, когда угодно и где угодно.
Zenitchik
Не всегда. Мне случалось nodejs-ом резать файлы на куски вменяемого размера...
serega011
Нет, Notepad++ дамп sql на 500 мб или чуть больше он уже отказывается открывать (он выкидывает какое-то ограничение на размер файла). А вот FAR (total comander и т.п.) открывает все мгновенно и в куда большем размере.
Zenitchik
Он самый. Дамп. У меня — просто рушится.
Silm
Хоть сам пользуюсь Notepad++ но sublime с большими файлами справляется лучше (быстрее в том числе).
AlexanderG
Сайблайм на файлах 50-100+ МБ тоже становится на колени.
arhangelsoft
Notepad++ team заблокировали эту возможность, т.к. Scintilla не может обрабатывать гигабайтные данные. А потому объём файла который может считать NPP это где-то 20-25% от вашей ОЗУ :) На 4гб ОЗУ и загруженностью оной на 60%, файлы жирнее 250 мб оно уже не открывает.
Такие дела.
poxu
Вим открывает гигабайтные файлы. Так что странно, что так вышло.
stavenko
Плагины и бандлы — подсветка синтаксиса и автодополнения… Если привычным движением открыть что-то непривычное — можно очень долго ждать.
friday
А вы разве не знали, что из vim можно выйти только перезагрузкой? Иначе он будет пищать и всё портить:-)
stavinsky
Это было утро. Я еще не проснулся и принял сей материал за чистую правду. Вот и набросился. Каюсь.