Сегодня расскажем об опыте миграции с npm на pnpm на одном из проектов и преимуществах такого решения.
pnpm отличается от пакетных менеджеров npm и yarn двумя ключевыми преимуществами — скоростью работы и безопасностью.
⚫Скорость установки пакетов с pnpm значительно выше, чем в npm и yarn. Это достигается за счет использования специальных hard links, с помощью которых один и тот же npm-пакет не копируется многократно, а извлекается из кэша, если он был ранее загружен. Также pnpm способен устанавливать несколько пакетов параллельно, что отражается на скорости установки.
⚫Безопасность работы обеспечивается за счет специального алгоритма, при котором создается файл с контрольными суммами всех установленных пакетов, и каждый npm-пакет перед выполнением кода проверяется на предмет целостности.
Проект должен был работать в docker-окружении, поэтому задачу с внедрением pnpm с помощью docker мы решили следующим образом:
✅ Собрали образ с помощью Dockerfile. За основу взяли Node.js 18 версию alpine
FROM node:18.16-alpine3.18✅ Собрали образ с именем Node.js:18-pnpm-8.6.1, который загрузили в свой gitlab registry
# Install pnpm
RUN apk add curl \
&& curl -fsSL "https://github.com/pnpm/pnpm/releases/download/v8.6.1/pnpm-linuxstatic-x64" -o /bin/pnpm; chmod +x /bin/pnpm;
✅ Подготовили docker-compose файл для запуска frontend-приложения
services:Пакетный менеджер pnpm может быть особенно полезен разработчикам JavaScript или TypeScript проектов. В нашем случае его использование помогло значительно ускорить установку пакетов и обеспечить безопасность выполнения кода.
# Nextjs applicaton container
app:
image: gitlab.com/images/nodejs:18-pnpm-8.6.1
logging:
driver: 'json-file'
options:
max-file: '2'
max-size: '5m'
container_name: app
restart: always
environment:
PORT: 3000
HOST_URL: "${HOST_URL}"
command: [ "pnpm", "start" ]
working_dir: "/app"
volumes:
- ./../../src:/app:rw
networks:
- network_name
