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

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

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

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

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

Сводка:

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

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

npm install

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

Для файла package.json всех проектов установлено значение

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

Также мне удалось добавить пользовательских пользователей в sinopia, манипулируя 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 выдает ошибку при неподдерживаемой команде.


person cdanea    schedule 25.03.2014    source источник


Ответы (5)


Во-первых, это не проблема «курицы и яйца».

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

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

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


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

  1. добавить пользователя / пройти в config.yaml (см. ответ Джоша) и перезапустить сервер sinopia
  2. запустить 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

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

person alex    schedule 28.03.2014
comment
+1 за комментарий publishConfig. Не знал, что мы сможем это сделать. - person deepelement; 14.10.2014
comment
Я просто потратил немного времени на это ... сгенерированный .npmrc из npm adduser немного переключается между необходимостью http:// перед URL-адресом частного реестра и отсутствием необходимости в префиксе протокола ... короче говоря, если вы забыли вставить http:// в себя в разделе publishConfig пакета, вы получите недопустимое сообщение об ошибке npm ERR! code ENEEDAUTH, где publish.js удаляет всю информацию аутентификации из вашего запроса. - person Droogans; 27.02.2015
comment
Похоже, Sinopia теперь поддерживает добавление пользователей простым вводом npm adduser --registry=http://localhost:4873. Больше не нужно редактировать config.yaml. - person Per Quested Aronsson; 30.08.2016

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

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

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

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

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

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

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

person josh3736    schedule 25.03.2014
comment
Ошибка npm adduser из-за неисправности сервера npmjs.org. Именно поэтому мне нужен локальный репозиторий. Тем не менее, это НЕ то, что я хотел: я не хочу, чтобы пользователь / пароль действовали для глобального репозитория npm. Нет ли способа вручную добавить пользователя в ~ / .npmrc, не делая его в глобальном CouchDB? - person cdanea; 26.03.2014
comment
В документе не сказано, что вам нужно добавить одного и того же пользователя и один и тот же пароль в обе системы, что мне очень не нравится. - person cdanea; 26.03.2014
comment
Нет, не знаешь. Вы создаете пользователя и хеш-пароль и добавляете его в config.yaml, а затем перезапускаете Sinopia. Затем вы используете adduser и указываете то же имя пользователя и пароль в виде обычного текста для входа на свой частный сервер. Это не обязательно должно быть то же самое, что и учетная запись, существующая в общедоступном npm. - person josh3736; 26.03.2014
comment
... другими словами, npm adduser --registry=http://localhost:4873 работал у меня, когда я вводил имя пользователя и пароль, которые я добавил в config.yaml. - person josh3736; 26.03.2014
comment
Хорошо, все мои проблемы связаны с тем, что npmjs.org не работал большую часть последних нескольких дней. Также я не знал, как добавить хэш пользователя / прохода в .npmrc без подключения к npmjs.org, теперь я знаю: _auth = base64 (user + ':' + pass) - person cdanea; 27.03.2014
comment
Похоже, Sinopia теперь поддерживает добавление пользователей простым вводом npm adduser --registry=http://localhost:4873. Больше не нужно редактировать config.yaml. - person Per Quested Aronsson; 30.08.2016

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

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

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

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

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

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

person cdanea    schedule 25.03.2014
comment
Чтобы избежать упомянутого вами недостатка, добавьте publishConfig, упомянутый в ответе Алексея ниже. Это ограничивает место публикации пакета внутри самого пакета. Таким образом, даже если кто-то забудет настроить реестр для npm, публикация все равно пойдет в правильный реестр для этого проекта. - person dylants; 24.05.2014

Начиная с версии 0.13, Sinopia поддерживает создание нового пользователя через

npm adduser --registry example.com:port

Для получения дополнительной информации см .: КАК СОЗДАТЬ НОВОГО ПОЛЬЗОВАТЕЛЯ SINOPIA

person mvermand    schedule 17.11.2014

Я помогаю участнику sinopia :) См. Здесь: https://github.com/rlidwka/sinopia/issues/230#issuecomment-91825660

person darky    schedule 03.06.2015