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
делает за сценой.