如何将私有项目发布到Sinopia(私有注册表的npm adduser失败)

时间:2014-03-25 14:01:26

标签: node.js npm package-managers

好的,所以我终于设法使用Sinopia获得私人npm注册表。 但我无法发布任何内容。

  

TL; DR:Sinopia不支持 npm adduser ,但拥有自己的用户   管理。此外,npm需要在 npm publish 之前创建的有效用户   通过 npm adduser ,由于内部Sinopia服务器而失败   在不支持的命令中抛出错误....

如何将Sinopia用作具有适当用户和密码的私人注册表

  1. 在npmjs.org中创建一个全局用户,然后在Sinopia中使用相同的密码创建另一个用户?
  2. 或者有一种更简单的方法告诉npm只使用固定的用户/通行证。
  3. 或者甚至更好地提示我输入用户名和密码?
  4. 别的什么?

  5. 剧情简介:

    Sinopia不依赖于Couch.DB,并且会从主服务器中获取它尚未拥有的包(默认为全局npmjs.org)。

    Sinopia完美启动并配置为侦听所有接口。它可以为包裹服务带来奇迹

    npm install
    

    我甚至将〜/ .npmrc配置为始终指向内部注册表。

    所有项目' package.json文件设置为

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

    我还设法通过在js-yaml的帮助下操作config.yaml来在sinopia中添加自定义用户

    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服务器在不支持的命令处抛出错误。

5 个答案:

答案 0 :(得分:25)

首先,它不是鸡肉和鸡蛋"问题

" npm adduser"做两件事:

  1. 它在远程服务器上创建一个新用户,或验证它是否存在
  2. 它将_auth添加到.npmrc
  3. 如果用户不存在,Sinopia会抱怨,如果确实存在,它会很乐意报告成功。


    所以,你需要做的是:

    1. 将用户/传递添加到config.yaml(请参阅josh的回答)并重新启动sinopia服务器
    2. 运行npm adduser --registry http://internal-npm:4873/
    3. 是的," adduser"命令令人困惑,因为它实际上没有添加新用户。它只是验证用户是否存在于配置中。

      如果您愿意,可以使用" npm login"命令。即使它完全相同,它也不那么令人困惑。 :)


      其次,将其添加到package.json:

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

      这样,npm不再将其发布到公共注册表中,即使它是默认注册表。


      最后,您不能使用相同的npmrc同时使用两个注册表(npmjs和您的私有注册表)。它比你想象的更less secure

      在大多数情况下都没问题,但是如果您 同时使用它们(例如,您同时维护公共和私有包),请使用{{3}而不是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
      

      在所有情况下,它都会阻止您将密码暴露给公共注册管理机构。

答案 1 :(得分:7)

The Sinopia README tells you exactly what to do

  

添加新用户

     

添加新用户没有实用程序,但您至少可以在命令行上使用节点来生成密码。您需要编辑配置并手动添加用户。

     

启动节点并输入以下代码,将“newpass”替换为您要获取哈希值的密码。

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

将新用户插入config.yaml文件。

然后运行npm adduser登录。 (adduser是用于创建帐户和登录的命令; sinopia不支持创建部分。)

答案 2 :(得分:4)

选项1工作,但我对此并不满意。所以我一直在搜索

是的,如果我添加一个有效的npmjs.org用户,那么就转换回购:

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

如果Sinopia中存在相同的用户/通行证,则发布命令将起作用

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

缺点是如果有人忘记明确设置私有注册表,那么发布将100%在全局npmjs.org上工作,这将是一场灾难。

答案 3 :(得分:0)

从版本0.13开始,Sinopia确实支持通过

创建新用户

npm adduser --registry example.com:port

有关详细信息,请参阅:HOW TO CREATE A NEW SINOPIA USER

答案 4 :(得分:0)

我帮助sinopia的贡献者:) 看这里: https://github.com/rlidwka/sinopia/issues/230#issuecomment-91825660