如何将私人项目发布到Sinopia(npm adduser私人registry失败)

好吧,所以我终于设法使用Sinopia得到一个私有的npmregistry。 但我不能发表任何东西。

TL; DR:Sinopia不支持npm adduser ,但有自己的用户pipe理。 另外npm需要一个有效的用户创build之前npm发布通过npm adduser ,这是因为内部的Sinopia服务器在不支持的命令抛出一个错误失败….

一个人如何使用Sinopia作为一个私人注册机构,拥有适当的用户和密码

  1. 在npmjs.org中创build一个全局用户,然后在Sinopia中使用相同的密码?
  2. 还是有一个更简单的方法来告诉npm只使用一个固定的用户/通行证。
  3. 或甚至更好地提示我以某种方式用户名和密码?
  4. 别的东西?

概要:

Sinopia不依赖于Couch.DB,并且可以通过master来获取它所没有的包(默认是全局的npmjs.org)。

Sinopia启动完美,并configuration为在所有接口上侦听。 它在服务包中运行奇迹

npm install 

我甚至configuration了〜/ .npmrc来始终指向内部registry。

所有项目的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 ,但是像我之前提到的那样有自己的用户pipe理。 此外,npm需要通过npm adduser创build的有效用户,因为内部的Sinopia服务器在不受支持的命令中引发错误,所以失败。

首先,这不是“鸡与鸡”的问题。

“npm adduser”做了两件事:

  1. 它会在远程服务器上创build一个新用户,或者validation它是否存在
  2. 它将_auth添加到您的.npmrc中

如果用户不存在,Sinopia会抱怨,但是如果这样做的话,它会很高兴地报告成功。


所以,你必须做的是这样的:

  1. 添加用户/传递给config.yaml(见josh的答案),并重新启动sinopia服务器
  2. 运行npm adduser --registry http://internal-npm:4873/

是的,“adduser”命令令人困惑,因为它实际上不会添加新用户。 它只会validation用户是否存在于configuration中。

如果你想,你可以使用“npmlogin”命令。 即使它完全一样,也不那么令人困惑。 🙂


其次,把这个添加到你的package.json中:

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

这种方式npm不会将其发布到公共registry,即使它是默认的。


最后,你不能同时使用两个registry(npmjs和你的私有registry)和npmrc。 这比你想象的更不安全 。

在大多数情况下都可以,但是如果你必须同时使用它们(例如,你同时维护公共和私有包),请使用yapm而不是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 

它会防止在任何情况下将您的密码暴露给公共registry。

Sinopia 自述文件准确告诉你该怎么做 。

添加一个新的用户

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

启动节点并input下面的代码,用你想获得散列的密码replace“newpass”。

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

将新用户插入到您的config.yaml文件中。

然后运行npm adduserlogin。 ( adduser是帐号创build和login使用的命令,sinopia不支持创build部分。)

选项1的作品 ,但我并不满意。 所以我会继续search

是的,如果我添加一个有效的npmjs.org用户,然后开始回购:

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

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

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

缺点是,如果有人忘记明确设置私人registry,发布将100%在全球npmjs.org工作,这将是一场灾难。

从版本0.13开始,Sinopia确实支持通过创build新用户

npm adduser –registry example.com:port

欲了解更多详情,请参阅: 如何创build一个新的SINOPIA用户

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