2014-06-10 14 views
7

Desidero automatizzare il processo di login di npm tramite uno script di bash.npm adduser via bash

ho provato con questo frammento:

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

Ma senza fortuna.

Nota: Cambierò le corde con le variabili env

risposta

18

@ Aurélien Thieriot: grazie per il suggerimento.

Ho due soluzioni per il mio problema:

Soluzione 1:

export $NPM_AUTH_TOKEN=myToken 
export $NPM_EMAIL=myEmail 

creare/Ignora ~/.npmrc seguendo shell script:

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

Soluzione 2:

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

Conosco l'ordine delle domande. così posso fare il seguente:

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

Nota: unica soluzione 2 opere quando l'utente non è ancora stato aggiunto
Altrimenti il ​​$NPM_PASSWORD non è necessario

+1

Per la soluzione 1, ho dovuto rimuovere '$' quando eseguivo l'esportazione. –

+1

Per la soluzione 2, rimuovere $ durante l'esportazione. –

0

Non so se è in qualche modo assicurata quindi per favore fare qualche ricerca prima.

Ma il fatto è che npm sta memorizzando tutte quelle informazioni in un file. Se si guarda:

cat ~/.npmrc 

Potrebbe essere abbastanza interessante in modo da poter effettuare il login di ballo solo una volta.

1

ho avuto questo problema, ma l'unico modo di aggirarlo era avvolgere l'aspettativa in un'immagine docker. Si può usare in questo modo:

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

+1

Grazie che aiuta molto! – ZoT

+1

Prego. Non mantengo più quel repository ma dovrebbe comunque funzionare. –

+1

Lo fa davvero! lo stiamo usando atm :) ta – ZoT

1

ho scoperto che su Windows Server 2012R2, c'è qualche comportamento strano con gli account di servizio. Questo metodo ha funzionato per me (come parte di una build di Jenkins, sotto bash):

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