Как связать реестр с областью действия в Yarn 2, не нарушая аутентификацию?

#security #yarnpkg #yarnpkg-v2

Вопрос:

В этой статье предлагается добавить конфигурацию .npmrc в ваш проект, чтобы связать область с частным реестром, чтобы снизить риск атаки с заменой npm (когда кто-то может намеренно опубликовать вредоносный общедоступный пакет с тем же именем).

Как мы можем достичь аналогичного эффекта в проекте Yarn 2? Я попытался добавить .yarnrc.yml файл в корневой каталог своего проекта:

 npmScopes:
  someScope:
    npmRegistryServer: https://npm.pkg.github.com
 

У нас также есть домашний каталог ~/.yarnrc.yml для каждого разработчика с аналогичной конфигурацией, но дополнительно с соответствующим npmAuthToken для аутентификации.

Однако, когда я выполняю a yarn install , я получаю Invalid authentication (as an anonymous user) ошибку для пакетов в этой области. Предположительно , конкретный проект .yarnrc.yml переопределяет настройки для каждого пользователя ~/.yarnrc.yml , поэтому информация об аутентификации больше не присутствует?

Смягчение, которого я добиваюсь , заключается в том, что если разработчик забудет запустить yarn npm login , он не будет проверять общедоступный реестр на наличие пакетов в определенной области. Есть ли способ сделать это в Yarn 2?

Ответ №1:

У меня просто была та же проблема. Проблема в том, что вам необходимо определить аутентификацию для каждого раздела (как указано в комментарии к этой проблеме). Это также относится к npmRegistries .

 npmScopes:
  someScope:
    npmRegistryServer: <your-registry-server>
    npmAuthToken: <your-token>
    npmAlwaysAuth: true
 

Имейте в виду, что дублированные конфигурации в иерархических определениях .yarnrc.yml не будут объединены, а будут заменены (см. Этот комментарий). Таким образом, если npmScopes он уже объявлен в домашнем каталоге, он перезаписывается объявлением в проекте.