Featured image of post Как настроить GitLab Private NPM Registry? Лучшие практики управления несколькими пакетами и разрешениями

Как настроить GitLab Private NPM Registry? Лучшие практики управления несколькими пакетами и разрешениями

Решите проблемы конфигурации GitLab Private NPM Registry, включая логику .npmrc, управление несколькими пакетами и устранение ошибок 404, с лучшими практиками для унификации реестра.

Вы пытаетесь использовать приватные пакеты (Private Package) в проекте своей компании, но застряли на настройке .npmrc?

Почему вы все еще получаете 404 Not Found даже после настройки токена (Token)?

Когда в компании есть несколько команд и несколько пакетов (например, @frontend, @backend), как элегантно управлять .npmrc?

Разрушение двух мифов о .npmrc

Чтобы понять .npmrc, вам сначала нужно понять, как он работает.

Проще говоря, его основная логика — это всего две вещи: Сопоставление области (Scope Mapping) и Аутентификация (Authentication).

1. Сопоставление области (Scope Mapping)

Это говорит npm: когда вы видите пакет, начинающийся с @company, не ходите на официальный npmjs.org, идите в наш указанный GitLab Registry.

@company:registry=https://gitlab.com/api/v4/groups/100/-/packages/npm/

2. Аутентификация (Authentication)

С адресом вам также нужен ключ. Ключ — это ваш AuthToken.

Вот супер важное правило: URL реестра и путь AuthToken должны «точно совпадать».

# ✅ Правильно: Путь точно такой же, как у реестра, определенного выше
//gitlab.com/api/v4/groups/100/-/packages/npm/:_authToken=${GITLAB_TOKEN}

# ❌ Неправильно: Несоответствие пути, это приведет к ошибке доступа
//gitlab.com/api/v4/:_authToken=${GITLAB_TOKEN}

Многие люди терпят неудачу в настройке часто потому, что в пути есть лишняя косая черта или не хватает уровня.

Ад зависимостей и ошибки 404

Самая болезненная ситуация: вы устанавливаете пакет A, который зависит от пакета B (тоже приватного), и затем npm выдает 404 Not Found.

Почему это происходит? Это потому, что когда npm разрешает зависимости, если нет правильной связи, он теряется.

Особенно когда у вас есть две разные области (например, @team-a и @team-b) в разных группах GitLab, .npmrc становится чрезвычайно сложным и трудным для поддержки. Кроме того, разным реестрам могут потребоваться разные токены, просто управление этими переменными среды утомляет.

Есть ли более умный способ?

Рекомендуемое решение: Unified Download Group Registry и Independent Publish Project Registry

Реестр Описание
Group Registry Чтобы иметь возможность унифицировать загрузку всех пакетов, унифицируйте настройку Group Registry для загрузки всех пакетов в этой группе Gitlab.
Project Registry Для разрешений во время публикации каждый проект может настроить свой собственный Project Registry для публикации.

Зачем это делать?

Причина Описание
Простая установка Можно легко установить и загрузить все пакеты в одной группе.
Простая публикация Можно легко публиковать пакеты в их соответствующих проектах, избегая публикации разных пакетов в одном и том же реестре; у каждого проекта есть свой реестр.
Прогатое управление токенами Будь то на компьютере разработчика или в среде CI/CD, нужно поддерживать только один набор GITLAB_NPM_TOKEN.
Избегание ошибок зависимостей Все приватные пакеты находятся в одном месте, npm определенно найдет их.

Настройка в действии

Вы можете скопировать этот шаблон напрямую:

Не забудьте передать задачу защиты токена переменным среды, абсолютно не прописывайте токен в коде!

# .npmrc
# @company scope использует реестр уровня группы
# Все пакеты @company/* будут устанавливаться из этого реестра
@company:registry=https://gitlab.com/api/v4/groups/YOUR_GROUP_ID/-/packages/npm/

# Конфигурация аутентификации GitLab npm registry
# Использовать общий токен аутентификации gitlab.com (покрывает все запросы уровня группы и проекта)
//gitlab.com/api/v4/groups/YOUR_GROUP_ID/-/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}
# Использовать реестр проекта для публикации пакетов
//gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/npm/:_authToken=${GITLAB_NPM_TOKEN}


# Другие публичные пакеты по-прежнему идут в официальный реестр
registry=https://registry.npmjs.org/

Настройте publishConfig в package.json, чтобы публиковать пакет в соответствующий GitLab Project Registry.

{
  "name": "@company/my-package",
  "publishConfig": {
    "@company:registry": "https://gitlab.com/api/v4/projects/YOUR_PROJECT_ID/packages/npm/"
  }
}

Заключение

Благодаря стратегии «Unified Download Group Registry» и «Independent Publish Project Registry» мы можем значительно снизить затраты на обслуживание и сделать процесс разработки более плавным.

Цель Описание
Точное совпадение Сопоставление области и путь токена должны точно совпадать
Безопасность прежде всего Используйте переменную среды ${GITLAB_NPM_TOKEN} для управления личной информацией
Централизованное управление Приоритетное использование унифицированной группы GitLab для загрузки всех приватных пакетов компании
Независимая публикация Приоритетное использование независимого проекта GitLab для публикации соответствующих приватных пакетов, управляя пакетами независимо, чтобы избежать хаоса

Освоив эти логики, GitLab NPM Registry станет мощным помощником в процессе разработки вашей компании!

All rights reserved,未經允許不得隨意轉載
Создано при помощи Hugo
Тема Stack, дизайн Jimmy