Обмен технологиями

Менеджеры пакетов — сравнение npm, Yarn, cnpm, pnpm

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. npm (управление пакетами узлов)

1.1 Локальная установка

Используйте команду: имя пакета установки npm или имя пакета npm i.
Локально установленные пакеты отображаются в каталоге node_module текущего каталога.
Если локально установленный пакет имеет CLI, npm поместит свой сценарий CLI в node_modules/.bin и использует команду npx для его вызова.

1.2 Глобальная установка

Глобально установленные пакеты помещаются в специальный глобальный каталог.
Используйте команду npm install --global package name или npm i -g package name.
Глобально установленный пакет доступен не для всех проектов, он предоставляет только глобальные инструменты CLI. В большинстве случаев нет необходимости устанавливать пакет глобально.

1.3 Команда установки

Зависит от производственной среды
npm я имя пакета
npm я --сохранить имя пакета
npm i -S имя пакета
Установите зависимости в среду разработки
npm i --save-dev имя пакета
npm i -D имя пакета

1.4. При использовании nodejs для импорта модуля, если путь к модулю не начинается с ./ или.../, узел будет думать, что импортированный модуль взят из каталога node_modules.
1.5.npm-скрипт

Настройте часто используемые команды CLI в поле сценария файла package.json и используйте имя сценария запуска npm для запуска сценария. npx можно опустить в скрипте.

2. Прошлые проблемы с npm:

  • Каталоги зависимостей имеют глубокую вложенность: раньше зависимости npm были вложенными, и система Windows не могла поддерживать слишком глубокие каталоги.
  • Медленная скорость загрузки: из-за глубоких уровней вложенности загрузка пакетов может осуществляться только последовательно, несколько пакетов одной и той же версии загружаются повторно;
  • Вывод на консоль сложен: печать большого количества деталей пакета.
  • Проблема с трансплантацией проекта: раньше существовал только файл конфигурации package.json, но не было файла package-lock.json.

3. Появление пряжи, поскольку она имеет следующие преимущества:

  • Используйте плоскую структуру каталогов
  • параллельная загрузка
  • Использовать локальный кеш
  • Оптимизируйте вывод информации на консоль и выводите только ключевую информацию.
  • Используйте файл блокировки пряжи для записи точных зависимостей.

4. Под влиянием Yarn npm6 использовал передовые концепции Yarn и внес следующие оптимизации:

  • Сглаживание каталогов
  • параллельная загрузка
  • локальный кэш
  • Используйте package-lock.json для записи точных зависимостей.
  • Добавлено большое количество псевдонимов команд.
  • Встроенный npx позволяет запускать локальные инструменты CLI.
  • Значительно упрощает вывод на консоль

5. cnpm

Сервер реестра npm находится за границей, что может привести к медленной загрузке или сбою. Раньше npm не предоставлял функции изменения реестра. Taobao создал собственный реестр, который представляет собой зеркало Taobao npm. Taobao также предоставляет инструмент CLI cnpm. Другие варианты использования в основном такие же, как и у npm.

6. пнпм

  • Как и npm и Yarn, кеш по-прежнему используется для сохранения установленных пакетов.Используйте pnpm-lock.yaml для записи подробных версий зависимостей.
  • В отличие от пряжи и npm, pnpm использует символические и жесткие ссылки для размещения зависимостей, избегая копирования файлов, повышая эффективность установки и значительно сокращая использование дискового пространства.
  • Благодаря использованию символических и жестких ссылок pnpm позволяет избежать проблемы слишком длинных путей в системах Windows, поэтому он использует древовидные зависимости. Из-за древовидных зависимостей проекты могут использовать только прямые, а не косвенные зависимости.

7. Принцип pnpm:

  • Суть файла: Файл на самом деле представляет собой указатель, указывающий на адрес внешнего хранилища (жесткий диск, флешка). Удаление файла фактически удаляет указатель, поэтому это происходит очень быстро.
  • Копия файла: скопируйте содержимое, на которое указывает указатель файла, а затем создайте новый указатель, указывающий на новое содержимое.
  • Жесткая ссылка: копирование указателя файла A на другой указатель файла B. Файл B является жесткой ссылкой на файл A.
  • Символическая ссылка (мягкая ссылка): создайте символическую ссылку B для файла или папки A, затем B укажет на A.
  • Ярлык: Подобно символической ссылке, это метод ссылки, который на первых порах поддерживался Windows. Это не только указатель, но также содержит различную информацию, такую ​​как разрешения, совместимость, метод запуска и т. д. Ярлыки уникальны для систем Windows и не используются на разных платформах.

Разница между символическими ссылками и жесткими ссылками

  • Жесткие ссылки могут связывать только файлы, тогда как символические ссылки могут связывать файлы и каталоги.
  • После завершения соединения жесткая ссылка связана только с содержимым файла и не имеет ничего общего с предыдущей ссылкой. Символические ссылки всегда связаны с ранее связанным файлом и не связаны напрямую с файлом содержимого.