Имя пользователя приватного реестра npm со специальными символами

Я пытаюсь получить доступ к приватному реестру npm, который размещен на удаленном сервере. Я должен получить к нему доступ с использованием имени пользователя и пароля. На моей стороне нет прокси.

Но, имя пользователя и пароль, которые я использую, имеют URL-адреса небезопасных символов. Я пробовал adduser, npmjs, scl, но я не могу настроить учетные данные:

npm WARN Name may not contain non-url-safe chars

Я попытался установить NPM_USER и NPM_PASS непосредственно из командной строки. Я могу установить первый, но позже не удается. Даже если я использую простой пароль и попробую:

npm login

Ошибка с той же ошибкой, поскольку NPM_USER имеет @

Я использую npmrc для переключения между государственными и частными реестрами. Я хочу избежать таких инструментов, как Nexus/JFrog.

версия npm - 4.0.5, а ОС - Windows 7

Что мне здесь не хватает?

Ответ 1

Напомним, что ваша проблема в том, что ваш личный реестр использует адреса электронной почты для имен пользователей, что нелегко поддерживается инструментами командной строки npm. Вам нужен способ указать свое имя пользователя без запуска npm adduser или npm login. Я не знаю, какой реестр вы используете, но у меня была такая же проблема с Inedo Proget.

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

#Settings for @SCOPENAME
@SCOPENAME:registry=https://DOMAIN/FEED/
//DOMAIN/FEED/:[email protected]
//DOMAIN/FEED/:_password=BASE64(PASSWORD)
//DOMAIN/FEED/:email=EMAIL_ADDRESS
//DOMAIN/FEED/:always-auto=true

#Settings for @OTHERSCOPENAME
@OTHERSCOPENAME:registry=...

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

Простой способ получить кодировку base64 вашего пароля - запустить:

echo -n 'PASSWORD' | base64

Ответ 2

Вам просто нужно войти в систему без "@". К сожалению, его трудно найти эту информацию на npm. Когда вы публикуете пакеты, вам нужно использовать символ @.

Если это для общедоступной организации и, например, у меня есть название организации "@seatbelt", поэтому имя пакета, которое я публикую в разделе "@seatbelt/core". Пакет устанавливается, набрав "npm install @seatbelt/core".

Если вам просто нужно публиковать частные пакеты, вы публикуете имена частных пакетов в формате "@username/project-name". Как и в примере выше, после опубликования вы можете установить пакет, выполнив "npm install @имя пользователя/имя проекта"

Более подробную информацию можно найти на https://docs.npmjs.com/private-modules/intro

Ответ 3

Я думаю, что это ограничение просто недопустимо. Многие корпорации используют единый вход с адресами электронной почты. Моя работа использует Artifactory с таким единым входом.

В наше время для лучшей практики, когда вам нужно поместить свой пароль в файл, смешно. Кодировка Base64... это может быть простой текст. Кодирование открытого текста не обеспечивает защиту открытого текста.