Прежде чем мы начнем отказ от ответственности.

Уловки и удивительность этого поста исходят из другого, который вы можете найти здесь. Первоначальная мысль была моей, и я намереваюсь обернуть ее дополнительным контекстом и историей вокруг моего рабочего процесса. Далее добавьте некоторые альтернативы, другие способы решения этой проблемы. Однако все кредиты следует передать автору (Mark Pieszak), который также мне очень помог. Спасибо за это Марек, если вы читаете это.

Ежедневно я работаю над многими вещами Node: проекты клиентов, пакеты с открытым исходным кодом, корпоративные решения — переключаюсь с одного на другое много раз в течение дня. Как вы, наверное, догадались, мне нужно установить и сохранить все эти зависимости узлов, размещенные в папках node_modules.

На моем жестком диске всего 250 ГБ свободного места (MacBook Pro). Часть этого пространства заполнена системой ОС, часть — приложениями, а часть — обычными данными, такими как документы, фотографии, музыка, видео и т. д.

Когда-то у меня закончилось свободное место, и из-за этого мои приложения не могут нормально работать — нет свободного места для памяти, кешей и так далее. Почему?

Итак, у меня возникла мысль, что, возможно, это из-за того, насколько огромны мои приложения/проекты. Я начал искать решение и нашел (выше статьи) и использовал/попробовал некоторые команды.

Во-первых, проверьте, сколько места отведено папкам node_modules. Для этого перейдите в папку разработки. Для меня это Dev прямо в корневом каталоге моего пользователя. Затем используйте эту команду.

mac: find . -name “node_modules” -type d -prune | xargs du -chs
win: FOR /d /r . %d in (node_modules) DO @IF EXIST "%d" echo %d"

Это может занять некоторое время, но в результате вы получите это.

---
list of all folders containing node_modules with space usage
---
55G total

Что? 🤯 Святая мольба! Это огромно.

Итак, что я могу сделать сейчас? Ну, я могу перейти к некоторым старым, неиспользуемым проектам и удалить node_modules папки. Но что, если я удалю их все, и когда мне нужно будет установить его снова, я просто сделаю это.

Ладно, а как убрать? Используйте эту команду, но помните, что этот процесс необратим, и вам нужно быть очень осторожным.

mac: find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
win: FOR /d /r . %d in (node_modules) DO @IF EXIST "%d" rm -rf "%d"

🧨 💥 💣 Я только что очистил свой жесткий диск от более чем 50 ГБ! 🧨 💥 💣

Хороший. Теперь, когда я возвращаюсь к каким-то старым проектам — если нужно — заново устанавливаю все зависимости. А с альтернативой использования Yarn я могу добиться этого даже быстрее, чем с NPM.

Ради любопытства я проверил то же самое в своей домашней папке. Оказывается, я все еще храню зависимости от Atom IDE, которые не использую уже много лет. Мусор.

Наконец, у меня есть эта цитата для вас.

Каждый байт, сохраненный на диске, можно использовать для чего-то другого, кроме кода библиотек.

Альтернативы

Есть и другие варианты, которые, вероятно, могут избавить вас от этой проблемы.

PNPM
Пока еще не так популярен, но pnpm может стать окончательной заменой npm. Под капотом он использует одно и центральное место для установки всех зависимостей/пакетов, и если вы используете, например, Vue.js внутри группы своих проектов, pnpm будет использовать их только один раз. Вы можете себе представить, что пространство, необходимое для зависимостей, будет намного меньше. Кроме того, общий процесс установки будет намного быстрее.

YARN
Ну, первая проблема с yarn может заключаться в том, что он не будет экономить место на жестком диске, как по умолчанию. Но это значительно ускорит процесс установки по сравнению с npm, так как работает асинхронно. Однако есть одна дополнительная функция, которую вы можете использовать: yarn автоочистка. Эта функция создаст специальный файл, который будет содержать все npm ненужных файлов пакетов, которые можно удалить. Ненужные файлы? Да, к сожалению, создатели пакетов, как правило, не используют файл .npmignore и оставляют внутри все файлы, которые не нужны для самого пакета.

Итак, как его использовать? Сначала запустите чистую конфигурацию.

yarn autoclean --init

Затем в корневой папке вашего проекта будет создан специальный .yarnclean файл. Внутри этого файла вы найдете такие вещи, как tests, docs, configs, etc.. Вы можете отредактировать этот список под свои нужды, возможно, вы захотите что-то оставить 🤷. Затем вы можете запустить эту команду.

yarn autoclean --force

Yarn найдет все эти файлы и удалит их. Наконец-то сэкономил место на диске. Среднее количество МБ для этой очистки составляет около 25–30 МБ. Это что-то верное?

UNPKG
Еще одной альтернативой может быть unpkg . Это не менеджер пакетов, а больше похоже на пакеты CDN. Таким образом, служба отслеживает все пакеты npm и сохраняет их распакованными. Таким образом, с помощью простого шаблона URL вы можете получить доступ к исходному коду пакета и использовать его в своем проекте, не устанавливая его. Интересный подход, и для некоторых приложений он может быть вполне законным.

Я думал, что для NPM есть более строгие альтернативы, но большинство подобных инструментов больше похоже на монорепозитории, менеджеры микрофронтендов, чем на сами пакеты. Но вы все равно можете проверить Бит или Раш для справки.

И это все. Надеюсь, вам понравилось, и это будет полезно. Ура.