Недавно я купил новый компьютер и настраивал новую среду разработки с облачным резервным копированием. Когда я начал перемещать файлы с одного компьютера на другой, я узнал, что мои 43 проекта javascript (веб, мобильные приложения, пакеты NPM и Meteor) содержат 2,7 МИЛЛИОНА файлов в общей сложности 42 ГБ! Мое интернет-облако для выполнения резервного копирования требуется 250 дней. Я чувствовал себя примерно так:

Когда я проанализировал, что состоит из этих файлов, я обнаружил, что 93% хранятся в папках node_modules с 90% -ной избыточностью, некоторые копируются 30 или более раз! Я думаю, когда вы просто продолжаете вводить эти npm install s вы не понимаете, сколько вещей попадает на ваш компьютер.

Причина довольно проста: каждая npm install помещает в вашу папку node_modules последние версии пакетов, как указано в вашем package.json, и все их зависимости. Поскольку каждый проект находится в разном состоянии и использует разные версии, логически они будут хранить разные файлы. Ага ... но поскольку я пытаюсь поддерживать все свои проекты в актуальном состоянии, я получаю все избыточности, когда один и тот же пакет NPM копируется снова и снова в другой каталог.

Когда я разместил свой вопрос в выпусках NPM, я не получил осмысленного ответа (всего получил 1 :). Но я не сдавался и решил сам решить эту проблему, написав расширение npm, которое будет связывать модули в каталоге node_modules. Это навлекло на меня еще одну дерьмовую бурю проблем, но в итоге я изучил следующую ветку, которая указала мне на УДИВИТЕЛЬНЫЙ проект pnpm.

Не только pnpm работает быстро, намного быстрее, чем npm, он решил всю проблему с символической привязкой модулей к так называемому хранилищу внутри каталога проекта.

Короче говоря, с помощью pnpm я уменьшил количество файлов до чуть более 300 000, а размер упал до 4 ГБ. Это примерно на 89% уменьшение количества файлов и размера каталогов! Мое резервное копирование в облако завершено в разумные сроки, и перемещение проектов и копирование шаблонов - это легкий ветерок.

Поскольку pnpm создает отдельное хранилище в каждом проекте, мне пришлось настроить параметры pnpn, чтобы создать глобальное хранилище, общее для всех проектов. Вы можете следить за обновлениями по этому поводу здесь. Что вы можете сделать, чтобы он заработал сейчас?

  1. Сначала создайте вилку проекта pnpm и клонируйте его в свой каталог.

2. В клонированном каталоге откройте файл ‘lib / config.js’ и измените путь к хранилищу на желаемый каталог.

module.exports = require(‘rc’)(‘pnpm’, {
 ...
 store_path: ‘/Users/tomi/.npmstore’,
 ...
})

3. В клонированном каталоге запустите npm link, чтобы создать глобальный модуль.

СДЕЛАНО!

Все, что вы можете сделать сейчас, это удалить папку node_modules, запустить ‘pnpm install’ и посмотреть, как творится волшебство!