Npm adduser через bash

Я хочу автоматизировать процесс регистрации npm с помощью bash script.

Я попробовал это с помощью этого фрагмента:

/usr/bin/expect -f - <<EOD
spawn npm adduser
expect "Username:"
send "myUserName\n"
expect "mail: (this IS public)"
send "[email protected]\n"
EOD

Но без везения.

Примечание. Я буду изменять строки с переменными env

Ответ 1

@Aurélien Thieriot: спасибо за подсказку.

У меня есть два решения для моей проблемы:

Решение 1

export NPM_AUTH_TOKEN=myToken
export NPM_EMAIL=myEmail

создать/переопределить ~/.npmrc помощью следующего сценария оболочки:

echo "_auth = $NPM_AUTH_TOKEN" > ~/.npmrc
echo "email = $NPM_EMAIL" >> ~/.npmrc

Решение 2

export NPM_USERNAME=myUsername
export NPM_PASSWORD=myPassword
export NPM_EMAIL=myEmail

Я знаю порядок вопросов. Так что я могу сделать следующее:

npm adduser <<!
$NPM_USERNAME
$NPM_PASSWORD
$NPM_EMAIL
!

Примечание: решение 2 работает только тогда, когда пользователь еще не добавлен
В противном случае $NPM_PASSWORD не требуется

Ответ 2

Этот способ работает и с более элегантным ожиданием:

/usr/bin/expect <<EOD
spawn npm adduser
expect {
  "Username:" {send "$USERNAME\r"; exp_continue}
  "Password:" {send "$PASSWORD\r"; exp_continue}
  "Email: (this IS public)" {send "$EMAIL\r"; exp_continue}
}
EOD

Ответ 3

Я обнаружил, что в Windows Server 2012R2 существует некоторое нечетное поведение с учетными записями служб. Этот метод работал у меня (как часть сборки Jenkins, под bash):

cat > ~/.npmrc <<EOL
//my.local.registry:4873/:_authToken="G....................A=="
always_auth=true
registry=http://my.local.registry:4873/
user=aRegisteredUser
EOL

Ответ 4

Я не знаю, было ли это защищено, поэтому, пожалуйста, сделайте некоторое исследование раньше.

Но факт в том, что npm хранит всю эту информацию в файле. Если вы посмотрите на:

cat ~/.npmrc

Это может быть достаточно интересно, чтобы вы могли танцевать только один раз.

Ответ 5

У меня была эта проблема, но единственный способ обойти ее - обернуть ожидание в изображение докеров. Вы можете использовать его так:

docker run \
    -e NPM_USER=$NPM_USER \
    -e NPM_PASS=$NPM_PASS \
    -e NPM_EMAIL=$NPM_EMAIL \
    bravissimolabs/generate-npm-authtoken \
    > ~/.npmrc

https://github.com/bravissimolabs/docker-generate-npm-authtoken

Ответ 6

Мое решение заключается в использовании плагина npm-login-cmd

npm install -g npm-login-cmd

export NPM_USER=user
export NPM_PASS=pass
export NPM_EMAIL=valid email syntax
npx npm-login-cmd

вход в систему на предприятии NMP репозиторий

Ответ 7

Для людей, работающих с частным реестром (как правило, для целей CI), прямой доступ к Rest API может быть решением:

curl -XPUT -H "Content-type: application/json" -d '{ "name": "your_username", "password": "your_password" }' 'http://localhost:4873/-/user/org.couchdb.user:your_username'

Это то, что npm adduser делает за сценой.