npm adduser via bash

时间:2014-06-10 14:46:04

标签: bash command-line npm

我想通过bash脚本自动执行npm登录过程。

我尝试使用此代码段:

/usr/bin/expect -f - <<EOD
spawn npm adduser
expect "Username:"
send "myUserName\n"
expect "mail: (this IS public)"
send "my@email.com\n"
EOD

但没有运气。

注意:我将使用env变量更改字符串

9 个答案:

答案 0 :(得分:21)

@AurélienThieriot:谢谢你的提示。

我的问题有两个解决方案:

解决方案1:

export $NPM_AUTH_TOKEN=myToken
export $NPM_EMAIL=myEmail

通过以下shell脚本创建/覆盖~/.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不是必需的

答案 1 :(得分:6)

这种方式有效,并且更优雅期待

/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

答案 2 :(得分:2)

我发现在Windows Server 2012R2上,服务帐户存在一些奇怪的行为。这个方法对我有用(作为Jenkins构建的一部分,在bash下):

<FMPDSORESULT xmlns="http://www.filemaker.com">
<ERRORCODE>0</ERRORCODE>
<DATABASE>My_Database</DATABASE>
<LAYOUT/>
<ROW MODID="1" RECORDID="1">
    <Name>John</Name>
    <Age>19</Age>
</ROW>
<ROW MODID="2" RECORDID="2">
    <Name>Steve</Name>
    <Age>25</Age>
</ROW>
<ROW MODID="3" RECORDID="3">
    <Name>Adam</Name>
    <Age>45</Age>
</ROW>

答案 3 :(得分:2)

在OSX上没有上述任何答案。

这确实可行:

npm install -g npm-cli-adduser
npm-cli-adduser -u username -p password -e email -r https://repo.com/nexus

答案 4 :(得分:1)

我不知道它是否有任何保障,所以请在此之前做一些研究。

但事实是npm将所有这些信息存储到文件中。如果你看看:

cat ~/.npmrc

它可能足够有趣,所以你只能登录舞蹈一次。

答案 5 :(得分:1)

我有这个问题,但绕过它的唯一方法是将expect包装成一个docker图像。您可以像这样使用它:

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 :(得分:1)

我的解决方案是使用插件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

在enterprice npm存储库上登录工作

答案 7 :(得分:0)

对于使用私有注册中心(通常用于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在幕后所做的事情。

答案 8 :(得分:0)

使用npm-cli-login软件包可以正常工作

# npm install -g npm-cli-login
# npm-cli-login -u myUser -p myPass -e t@ex.com -r http://192.168.56.1:4873

检查是否已安装

# whereis npm-cli-login
npm-cli-login:
# whereis npm-cli-login | grep '/npm-cli-login' -ic
0

安装后:

# npm install -g npm-cli-login

检查是否已安装:

# whereis npm-cli-login
npm-cli-login: /usr/bin/npm-cli-login
# whereis npm-cli-login | grep '/npm-cli-login' -ic
1

让我们登录:

# npm-cli-login -u myUser -p myPass -e t@ex.com -r http://192.168.56.1:4873
info attempt registry request try #1 at 10:13:19 PM
http request PUT http://192.168.56.1:4873/-/user/org.couchdb.user:myUser
http 409 http://192.168.56.1:4873/-/user/org.couchdb.user:myUser
info attempt registry request try #1 at 10:13:19 PM
http request GET http://192.168.56.1:4873/-/user/org.couchdb.user:myUser?write=true
http 200 http://192.168.56.1:4873/-/user/org.couchdb.user:myUser?write=true
info attempt registry request try #1 at 10:13:20 PM
http request PUT http://192.168.56.1:4873/-/user/org.couchdb.user:myUser/-rev/undefined
http 201 http://192.168.56.1:4873/-/user/org.couchdb.user:myUser/-rev/undefined
#
# npm whoami
myUser
#
# npm logout
# npm whoami
npm ERR! code ENEEDAUTH
npm ERR! need auth This command requires you to be logged in.
npm ERR! need auth You need to authorize this machine using `npm adduser`

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-04-21T22_13_42_373Z-debug.log