Использование областей npm для управления пакетами в Azure Artifact

Сервисы Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Области npm помогают классифицировать связанные пакеты в группы. Они позволяют создавать пакеты с теми же именами, что и пакеты, созданные другими пользователями без конфликтов. Используя пространства имён, можно разделить публичные и частные пакеты, добавив префикс пространства имён @scopeName и настроив файл .npmrc для использования источника с этим пространством имён.

Azure Artifacts поддерживает публикацию и загрузку пакетов с областью видимости и без неё из каналов или общедоступных реестров. Области npm особенно полезны при работе с локальными серверами, не имеющими доступа к Интернету, так как настройка вышестоящих источников в этих сценариях невозможна. Итак, при использовании областей видимости:

  • Вам не нужно опасаться конфликтов имен.
  • Вам не нужно изменять реестр npm для установки или публикации пакетов.
  • У каждой организации или пользователя в npm есть собственная область видимости, и только владелец или участники этой области видимости могут публиковать в ней пакеты.

Prerequisites

Продукт Requirements
Azure DevOps — Организация Azure DevOps.
— Azure DevOps project.
— Azure Artifacts feed.
— Скачивание и установка Node.js и npm.

Подключиться к вашей ленте новостей

Перед настройкой областей npm подключите проект к веб-каналу Azure Artifacts. Убедитесь, что вы выполнили необходимые условия и создадите веб-канал, а затем выполните следующие действия.

Azure Artifacts рекомендует использовать два отдельных NPMRC-файла. Храните один файл в вашем пользовательском каталоге для хранения учетных данных, а второй — в том же каталоге, что и файл package.json, для хранения конфигурации, специфичной для источника пакетов.

  1. Войдите в Azure DevOps, а затем перейдите в проект.

  2. Выберите Артефакты и выберите ваш канал в раскрывающемся меню.

  3. Выберите "Подключиться к каналу" и выберите npm в области навигации слева.

  4. Если вы впервые используете Azure Artifacts с npm, выберите "Получить средства" и следуйте инструкциям по установке необходимых компонентов для операционной системы. Сначала необходимо установить Node.js и npm. Затем в зависимости от операционной системы установите vsts-npm-auth для Windows или настройте учетные данные для сред, отличных от Windows. Инструкции, отличные от Windows, см. в разделе "Подключение к каналу " Другие".

  5. Создайте NPMRC-файл в том же каталоге, что и файл package.json, а затем вставьте фрагмент из раздела установки Project в этот файл.

  6. В Windows выполните следующую команду, чтобы добавить маркер Azure Artifacts в NPMRC-файл на уровне пользователя. Эта команда не требуется выполнять каждый раз. Когда срок действия токена истекает, npm возвращает ошибку 401 Unauthorized, что означает, что его пора обновить.

vsts-npm-auth -config .npmrc

Note

vsts-npm-authне поддерживается в Azure DevOps Server. Инструкции, отличные от Windows, см. в разделе "Подключение к каналу " Другие".

Настройка диапазона

Чтобы использовать области видимости с Azure Artifacts, обновите файл .npmrc проекта так, чтобы пакеты с областью видимости, которые вы публикуете или устанавливаете, разрешались через ваш канал. Замените registry=<YOUR_SOURCE_URL> на @ScopeName:registry=<YOUR_SOURCE_URL>.

Также обновите файлpackage.json, чтобы включить имя области и имя пакета, например: { "name": "@ScopeName/PackageName" } В следующих примерах показано, как настроить ленты на уровне организации и проекта.

  • Лента, охватывающая всю организацию:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    {
      "name": "@ScopeName/PackageName"
    }
    
  • Лента, ограниченная рамками проекта:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    {
      "name": "@ScopeName/PackageName"
    }
    

Example

  • NPMRC-файл:

    @local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/
    
  • Файл package.json :

    {
      "name": "@demo/js-e2e-express-server",
      "version": "2.0.0",
      "description": "JavaScript server written with Express.js",
      "main": "index.js",
      "directories": {
        "doc": "docs",
        "test": "test"
      }
    }
    

Публикация пакетов с областью действия

После настройки области и обновления файлов проекта откройте окно командной строки, перейдите в каталог проекта и выполните следующую команду, чтобы опубликовать пакет с областью действия. В предыдущем примере пакет публикуется в области видимости @local.

npm publish

Восходящие источники и области

Вышестоящий источник обеспечивает большую гибкость. Используя восходящие источники, вы можете получать как пакеты с областью, так и пакеты без области из канала Azure Artifacts, а также использовать пакеты из общедоступных реестров, таких как npmjs.com. Этот подход хорошо работает, если нужно, чтобы один канал служил основным источником как для внутренних пакетов, так и для одобренных внешних зависимостей.

Области видимости более ограничены, но в подходящем случае они всё же могут быть практичным решением. При использовании областей каждое имя пакета должно начинаться с @<scope>, что означает, что необходимо принять и сохранить это соглашение об именовании в пакетах. Например, если вы публикуете пакет как @local/my-package, необходимо продолжать использовать это имя в любой точке ссылки на пакет.

Это требование может добавить дополнительные расходы, особенно если вы планируете опубликовать те же пакеты в общедоступном реестре позже. При удалении областей при развертывании пакетов необходимо также обновить соответствующие ссылки в файлахpackage.json и любых зависимых проектах.

Даже с этими ограничениями области видимости могут служить вполне подходящей альтернативой, когда использование вышестоящих источников нецелесообразно. Это особенно актуально в изолированных или самостоятельно размещаемых средах, где нет доступа к общедоступным реестрам и где вы хотите избежать конфликтов имён пакетов, сохраняя при этом упорядоченность пакетов в вашем канале.