Настройте Lerna для публикации пакетов NPM в частном репозитории Gitlab

#gitlab #lerna

#gitlab #lerna

Вопрос:

Я провожу несколько тестов с Lerna, чтобы создать моно-репозиторий с кучей пакетов, которыми я хотел бы поделиться с некоторыми приложениями. Я следовал документации Lerna для настройки проекта, и это файловая структура:

 - lernatest/
    - lerna.json
    - package.json
    - packages/
        - common
            - src/
                - index.ts
            - .npmrc
            - package.json
        - models
            - src
                - index.ts
            - .npmrc
            - package.json
  

Мне нужно опубликовать пакеты в частном проекте внутри моей учетной записи Gitlab. Перед использованием Lerna я мог бы сделать это вручную для каждого пакета, добавив .npmrc файл со следующим содержимым:

 @mypackages:registry=https://gitlab.com/api/v4/packages/npm/
//gitlab.com/api/v4/projects/<PROJECT_ID>/packages/npm/:_authToken=<TOKEN>
//gitlab.com/api/v4/packages/npm/:_authToken=<TOKEN>
  

И в каждом package.json файле:

 {
  "name": "@mypackages/common",
  "publishConfig": {
    "@mypackages:registry": "https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/npm/"
  }
  (ETC...)
}
  

Я не знаю, как правильно настроить Lerna для публикации пакетов в моем реестре Gitlab. Это мой lerna.json файл:

 {
  "version": "0.0.5",
  "packages": [
    "packages/*"
  ],
  "command": {
    "publish": {
      "registry": "https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/npm/"
    }
  }
}
  

Но когда я запускаю npx lerna publish , я получаю следующую ошибку:

 lerna info publish Publishing packages to npm...
lerna notice Skipping all user and access validation due to third-party registry
lerna notice Make sure you're authenticated properly ¯_(ツ)_/¯
lerna http fetch PUT 401 https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/npm/@mypackages/common 462ms
lerna ERR! E401 401 Unauthorized - PUT https://gitlab.com/api/v4/projects/<PROJECT_ID>/packages/npm/@mypackages/gcommon
  

Я пробовал искать документацию, но не могу найти ничего полезного, есть идеи?

Спасибо!

Комментарии:

1. Сообщение об ошибке указывает, что вам необходимо пройти проверку подлинности. Я думаю, вы используете пакеты с ограниченной областью действия ( @scoped/package-name )? Я прав? Вам необходимо установить маркер безопасности: npm config set '//gitlab.com/api/v4/projects/<your_project_id>/packages/npm/:_authToken' "<your_token>" Из документации

2. Привет! Я установил данные аутентификации в .npmrc файле в корне проекта, и теперь он работает. Спасибо за ваше предложение.

3. Отлично. Приятно слышать

Ответ №1:

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

Вот как .npmrc выглядит мой файл:

 @mypackages:registry=https://gitlab.com/api/v4/packages/npm/
//gitlab.com/api/v4/projects/<PROJECT_ID>/packages/npm/:_authToken=<TOKEN>
//gitlab.com/api/v4/packages/npm/:_authToken=<TOKEN>
  

Комментарии:

1. Пожалуйста, опубликуйте пример того, как .npmrc выглядит ваш файл (без токена безопасности, конечно)

2. Наконец, это решило проблему для меня, большое спасибо, что поделились этим.