Как опубликовать публичный npm пакет с приватными зависимостями

Вопрос или проблема

У меня есть пакет A в частном реестре. Я добавил его как зависимость к публичному пакету B. Пакет B является зависимостью пакета C. Но проблема в том, что npm требует доступа к A из пакета C. Как я могу собрать пакет B таким образом, чтобы он был полностью публичным?

Пакет A должен оставаться приватным.

Ответ или решение

Для того чтобы опубликовать публичный пакет B с приватными зависимостями (например, пакетом A), и при этом сделать так, чтобы доступ к пакету A не требовался при установке пакета C, вам нужно следовать нескольким шагам. Ниже приведены рекомендации по успешной реализации этой задачи.

Шаги для публикации публичного пакета с приватными зависимостями

  1. Использование peerDependencies:

    • Если пакет A необходим только для разработки или не является обязательным для использования пакета B в обычных сценариях, вы можете переместить зависимость A в peerDependencies в файле package.json вашего пакета B. Это будет означать, что пользователи, которые устанавливают пакет B, должны самостоятельно установить пакет A, если он им нужен. Например:
      {
      "name": "package-B",
      "version": "1.0.0",
      "peerDependencies": {
       "package-A": "^1.0.0"
      }
      }
    • Таким образом, при установке пакета C, пакет A не будет автоматически загружаться, и доступ к нему не будет требоваться.
  2. Создание обертки:

    • Если пакет A действительно необходим для работы пакета B и не может быть сделан опциональным, вы можете создать обертку для пакета A, которая будет выступать в качестве интерфейса. Этот слой может скрывать детали реализации пакета A, таким образом, пакет B будет работать корректно, но не будет являться прямой зависимостью.
  3. Монорепозиторий:

    • Если ваш проект достаточно большой, рассмотрите возможность использования монорепозитория с инструментами вроде Lerna или Yarn Workspaces. Это позволяет управлять несколькими пакетами и их зависимостями более эффективно. В этом случае, вы можете настроить приватный пакет в рамках одного репозитория, и он не будет опубликован публично.
  4. Скрипты сборки:

    • Убедитесь, что в процессе сборки пакета B вы исключаете пакеты, которые находятся в приватных репозиториях. Вам может потребоваться создать собственный скрипт сборки, который будет удалять ссылки на приватные зависимости перед публикацией.
  5. Тестирование:
    • Перед публикацией пакета B на npm, убедитесь, что вы протестировали установку пакета C без доступа к пакету A. Проверьте, что никаких ошибок не возникает и все необходимые функции работают корректно.

Публикация пакета

После выполнения всех вышеперечисленных шагов, вы можете опубликовать пакет B на npm:

  1. Войдите в свой npm аккаунт:

    npm login
  2. Опубликуйте пакет B:
    npm publish --access public

Заключение

Таким образом, для успешной публикации публичного пакета с приватными зависимостями необходимо правильно управлять зависимостями, использовать peerDependencies и тщательно тестировать пакет перед его публикацией. Следуя этим рекомендациям, вы сможете сохранить пакет A приватным, обеспечивая при этом доступ к пакету B.

Оцените материал
Добавить комментарий

Капча загружается...