Подтвердить что ты не робот

Как публиковать частные проекты в Sinopia (npm adduser для частного реестра не работает)

Хорошо, поэтому мне удалось получить частный реестр npm с помощью Sinopia. Но я ничего не могу опубликовать.

TL; DR: Sinopia не поддерживает npm adduser, но имеет своего собственного пользователя управление. Также npm требует действительного пользователя, созданного до публикации npm через npm adduser, который терпит неудачу, поскольку внутренний сервер Sinopia выдает ошибку при неподдерживаемой команде....

Как использовать Sinopia как частный реестр с правильными пользователями и паролями

  • создать глобального пользователя в npmjs.org, а затем другой с тем же паролем в Sinopia?
  • Или есть более простой способ сказать npm просто использовать фиксированный пользователь/пропуск.
  • Или даже лучше подскажите мне как-то для имени пользователя и пароля?
  • что-то еще?

Сводка:

Sinopia не зависит от Couch.DB и будет извлекать пакеты, которые у него еще нет у мастера (по умолчанию это глобальный npmjs.org).

Sinopia отлично работает и настроена на прослушивание всех интерфейсов. Он работает чудесами в обслуживании пакетов

npm install

Я даже настроил ~/.npmrc, чтобы всегда указывать на внутренний реестр.

Все файлы package.json для всех проектов установлены на

  ....
  "publishConfig" : {
     "registry" : "http://internal-npm:4873"
  },
  ....

Также мне удалось добавить пользовательских пользователей в синопию, манипулируя config.yaml с помощью js-yaml

crypto.createHash('sha1').update('theBigPassword').digest('hex')

Теперь я застрял в

npm --registry=http://internal-npm:4873 --ca=null publish

После долгого ожидания я получаю:

npm ERR! need auth auth and email required for publishing
npm ERR! need auth You need to authorize this machine using `npm adduser`

npm ERR! System Linux 3.11.0-18-generic
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "--registry=http://internal-npm:4873" "--ca=null" "publish"
npm ERR! cwd /home/ciprian/workspace/netop-npm
npm ERR! node -v v0.10.15
npm ERR! npm -v 1.2.18
npm ERR! code ENEEDAUTH
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/ciprian/workspace/netop-npm/npm-debug.log
npm ERR! not ok code 0

Бизнес-конец файла журнала сообщает мне, что пользователь не является необязательным

86 error need auth auth and email required for publishing
86 error need auth You need to authorize this machine using `npm adduser`
87 error System Linux 3.11.0-18-generic
88 error command "/usr/bin/nodejs" "/usr/bin/npm" "--registry=http://internal-npm:4873" "--ca=null" "publish"
89 error cwd /home/ciprian/workspace/netop-npm
90 error node -v v0.10.15
91 error npm -v 1.2.18
92 error code ENEEDAUTH
93 verbose exit [ 1, true ]

Теперь проблема курица и яйцо заключается в том, что Sinopia не поддерживает npm adduser, но имеет собственное управление пользователями, как я упоминал выше. Кроме того, npm требует действительного пользователя, созданного с помощью npm adduser, который терпит неудачу, потому что внутренний сервер Sinopia выдает ошибку при неподдерживаемой команде.

4b9b3361

Ответ 1

Прежде всего, это не проблема "курицы и яйца".

"npm adduser" выполняет две функции:

  • он создает нового пользователя на удаленном сервере или проверяет, существует ли он
  • он добавляет _auth к вашему .npmrc

Sinopia будет жаловаться, если пользователь не существует, но если это произойдет, он с радостью сообщит об успехе.


Итак, вам нужно сделать следующее:

  • добавить пользователя/перейти к config.yaml(см. ответ josh) и перезапустить сервер синопии
  • run npm adduser --registry http://internal-npm:4873/

Да, команда adduser запутанна, потому что на самом деле она не добавит нового пользователя. Он просто проверит, что пользователь существует в config.

Если вы хотите, вы можете использовать команду "npm login". Он менее запутан, хотя он делает то же самое.:)


Во-вторых, добавьте это в свой пакет package.json:

"publishConfig": {
  "registry": "http://internal-npm:4873/"
}

Таким образом, npm больше не будет публиковать его в публичном реестре, даже если он по умолчанию.


И, наконец, вы не можете использовать два регистра (npmjs и ваш частный) одновременно с тем же npmrc. Это даже менее безопасно, чем вы думаете.

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

[registries."https://registry.npmjs.org/"]
_auth = (your auth string for public registry)

[registries."http://internal-npm:4873/"]
_auth = (your auth string for private registry)
always-auth = true

Это предотвратит публикацию ваших паролей в общедоступном реестре во всех случаях.

Ответ 2

Sinopia README сообщает вам, что именно делать.

Добавление нового пользователя

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

Запустите node и введите следующий код, заменяющий "newpass" паролем, для которого вы хотите получить хэш.

$ node
> crypto.createHash('sha1').update('newpass').digest('hex')
'6c55803d6f1d7a177a0db3eb4b343b0d50f9c111'
> [CTRL-D]

Вставьте нового пользователя в файл config.yaml.

Затем вы запустите npm adduser для входа в систему. (adduser - это команда, используемая как для создания учетной записи, так и для входа в систему; синопия не поддерживает часть создания.)

Ответ 3

Вариант 1 работает, но я не очень доволен этим. Поэтому я продолжу поиск

ДА, если я добавлю действительного пользователя npmjs.org, затем разверните репо:

npm config set registry http://internal-npm:4873/

Команда публикации будет работать, если один и тот же пользователь/пароль существует в Sinopia

npm publish --registry=http://internal-npm:4873/

Недостаток заключается в том, что если кто-то забывает явно установить частный реестр, публикация будет 100% работать с глобальным npmjs.org, что было бы катастрофой.