🌍 Привет мир! 👋
🌍 Привет мир! 👋
Каждый день сталкиваюсь с такими менеджерами пакетов как npm, yarn, но гораздо реже с pnpm. Если в проекте уже использовался
— Используй
Он же такой крутой, быстрый, модный. Поэтому давайте разбираться в чем же крутость то?
🚀 Мотивация
Первое что я сделал, это зашел на State of JS, в котором совсем недавно были подведены итоги за 2️⃣0️⃣2️⃣4️⃣, где более 14 000 разработчиков приняли участие в опросе и поделились своим опытом. И посмотрев 👀 на статистку среди менеджеров пакетов, видно что
Еще есть очень занятная статистика среди самых популярных менеджеров в официальной документации PNPM.
Ну что же, хватит мотивации, к делу!
👁️ Личные наблюдения
Решил потестить, для одного и того же проекта, пакеты ставились со скоростью 👇:
🧠 Думаю комментарии будут лишними...
Какие проблемы могут возникнуть при использовании npm❓
Поясню на примере:
У вас несколько проектов и в каждом из них используется один и тот же набор зависимостей.
При использовании npm, каждый из проектов будет хранить зависимости в node_modules, и даже зависимости зависимостей будут лежать в корне
➖ Из-за такого подхода есть явные минусы:
📌 съедается место на диске, так как каждый проект тянет все пакеты в
📌 из-за того, что в корне
📌 могут возникнуть проблемы при дублировании пакетов из-за
В чем киллер фичи pnpm❓
📌 Система хранения пакетов: экономия дискового пространства и ускорение процесса установки. Реализуется за счет "hard links" and "symlinks"
📌 Эффективное использование дискового пространства:
📌 Быстрая установка: За счёт того, что пакеты не копируются, а ссылаются на уже существующие в кэше, установка происходит быстрее, так как нет необходимости устанавливать уже существующие пакеты.
📌 Изоляция зависимостей:
📌 Особенная структура: из-за особой структуры, исключается возможность импорта библиотеки, которая явна не указана в качестве зависимости в
Итог: как выглядит структура
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#CODINGTIPS
Каждый день сталкиваюсь с такими менеджерами пакетов как npm, yarn, но гораздо реже с pnpm. Если в проекте уже использовался
pnpm, я просто гуглил команды и делал что нужно. Но что-то последнее время с каждого утюга слышится:— Используй
pnpm! Он же такой крутой, быстрый, модный. Поэтому давайте разбираться в чем же крутость то?
🚀 Мотивация
Первое что я сделал, это зашел на State of JS, в котором совсем недавно были подведены итоги за 2️⃣0️⃣2️⃣4️⃣, где более 14 000 разработчиков приняли участие в опросе и поделились своим опытом. И посмотрев 👀 на статистку среди менеджеров пакетов, видно что
PNPM явно обходит своих конкурентов.Еще есть очень занятная статистика среди самых популярных менеджеров в официальной документации PNPM.
Ну что же, хватит мотивации, к делу!
👁️ Личные наблюдения
Решил потестить, для одного и того же проекта, пакеты ставились со скоростью 👇:
-------------------------------------
| | with lock | without lock |
|--------|-----------|--------------|
| npm | 11s | 2m |
| yarn | 8s | 86s |
| pnpm | 3.3s | 28s |
-------------------------------------
🧠 Думаю комментарии будут лишними...
Какие проблемы могут возникнуть при использовании npm❓
Поясню на примере:
У вас несколько проектов и в каждом из них используется один и тот же набор зависимостей.
node_modules
└─ express
├─ index.js
├─ package.json
└─ cookie
├─ index.js
├─ package.json
При использовании npm, каждый из проектов будет хранить зависимости в node_modules, и даже зависимости зависимостей будут лежать в корне
node_modules (cookie это зависимость библиотеки express). ➖ Из-за такого подхода есть явные минусы:
📌 съедается место на диске, так как каждый проект тянет все пакеты в
node_modules.📌 из-за того, что в корне
node_modules находятся и зависимости зависимостей, есть вероятность заимпортировать пакет, который явно у вас в package.json не установлен.📌 могут возникнуть проблемы при дублировании пакетов из-за
Peer Dependencies. Не знали про Peer Dependencies? Cтавьте лайки ❤️, расскажу подробно.В чем киллер фичи pnpm❓
📌 Система хранения пакетов: экономия дискового пространства и ускорение процесса установки. Реализуется за счет "hard links" and "symlinks"
📌 Эффективное использование дискового пространства:
pnpm использует "hard links" и сохраняет каждую версию пакета в в глобал стор (global pnpm-store) на жестком диске (в кэше). Когда пакеты устанавливаются в проект, pnpm создает жесткую ссылку на эту копию, вместо того чтобы сохранять новый экземпляр в папке node_modules.📌 Быстрая установка: За счёт того, что пакеты не копируются, а ссылаются на уже существующие в кэше, установка происходит быстрее, так как нет необходимости устанавливать уже существующие пакеты.
📌 Изоляция зависимостей:
pnpm создает жесткую структуру node_modules, которая помогает избегать конфликтов зависимостей. Это позволяет каждому проекту иметь свои собственные зависимости без путаницы, которую может вызвать flattening дерева зависимостей в npm или yarn.📌 Особенная структура: из-за особой структуры, исключается возможность импорта библиотеки, которая явна не указана в качестве зависимости в
package.json.Итог: как выглядит структура
node_modules при использовании pnpm:node_modules/
├── express -> .pnpm/express@4.17.1/node_modules/express
├── .pnpm/
│ ├── express@4.17.1/
│ │ └── node_modules/
│ │ ├── express/
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ └── cookie@0.4.0/
│ │ ├── index.js
│ │ └── package.json
│ ├── cookie@0.4.0/
│ │ ├── index.js
│ │ └── package.json
│ └── ...
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#CODINGTIPS

Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.