Как перейти с yarn / npm на pnpm


Мотивация

pnpm более производителен при получении, разрешении и хранении зависимостей. Мой личный опыт показывает, что в некоторых проектах pnpm может быть примерно в 10 раз быстрее при разрешении зависимостей и до 3 раз эффективнее при использовании диска.

Также легко начать использовать pnpm, если вы уже использовали npm или yarn, поскольку CLI очень похож.

https://pnpm.io/motivation

Руководство по миграции

Шаг 1: Установите pnpm.
Шаг 2: Удалите node_modules.

npx npkill
Вход в полноэкранный режим Выйти из полноэкранного режима

Шаг 3: Добавить в package.json

"scripts": {
  "preinstall": "npx only-allow pnpm", 
  ...
}
Войдите в полноэкранный режим Выйти из полноэкранного режима

Это предотвратит случайную установку зависимостей другими разработчиками с помощью чего-либо еще, кроме pnpm.

Шаг 4: Создайте pnpm-workspace.yaml

packages:
  # include packages in subfolders (e.g. apps/ and packages/)
  - "apps/**"
  - 'packages/**'
  # if required, exclude some directories
  - '!**/test/**'
Войдите в полноэкранный режим Выйти из полноэкранного режима

Шаг 4 (a): удалите "workspaces" из "package.json", поскольку он больше не нужен.

Шаг 5: Запустите

pnpm import
Войдите в полноэкранный режим Выйти из полноэкранного режима

Эта команда создаст файл pnpm-lock.yaml на основе yarn.lock (или packages-lock.json).
Шаг 6: Удалите yarn.lock (или packages-lock.json).
Шаг 7: Установите зависимости

pnpm i
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Шаг 8: Замените npm run (или yarn) на pnpm во всех package.json и других файлах (например, pnpm test вместо npm run test).

Важно! Вы должны помнить, что pnpm не использует hoisting зависимостей:

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

На практике это означает, что если у вас есть пакет A, который импортирует пакет B (import something from 'B'), но не указывает явно B в dependencies или devDependencies, то выполнение будет неудачным.

Шпаргалка

Таблицы Команды Круто
Установить зависимости pnpm i https://pnpm.io/cli/install
Добавить зависимость pnpm add <package> https://pnpm.io/cli/add
Показывает все пакеты, которые зависят от указанного пакета pnpm why <package> https://pnpm.io/cli/why
Запуск команды, как если бы она была выполнена из корня проекта, а не из пакета рабочей области pnpm -w <command> https://pnpm.io/pnpm-cli#-w—workspace-root
Ограничение команд определенными подмножествами пакетов pnpm --filter <package_selector> <command> https://pnpm.io/filtering
Это запускает произвольную команду из объекта «scripts» каждого пакета. pnpm -r <command> https://pnpm.io/cli/run#—recursive—r

Оцените статью
Procodings.ru
Добавить комментарий