如何将私人项目发布到Sinopia(npm adduser私人registry失败)
好吧,所以我终于设法使用Sinopia得到一个私有的npmregistry。 但我不能发表任何东西。
TL; DR:Sinopia不支持npm adduser ,但有自己的用户pipe理。 另外npm需要一个有效的用户创build之前npm发布通过npm adduser ,这是因为内部的Sinopia服务器在不支持的命令抛出一个错误失败….
一个人如何使用Sinopia作为一个私人注册机构,拥有适当的用户和密码
- 在npmjs.org中创build一个全局用户,然后在Sinopia中使用相同的密码?
- 还是有一个更简单的方法来告诉npm只使用一个固定的用户/通行证。
- 或甚至更好地提示我以某种方式用户名和密码?
- 别的东西?
概要:
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”做了两件事:
- 它会在远程服务器上创build一个新用户,或者validation它是否存在
- 它将_auth添加到您的.npmrc中
如果用户不存在,Sinopia会抱怨,但是如果这样做的话,它会很高兴地报告成功。
所以,你必须做的是这样的:
- 添加用户/传递给config.yaml(见josh的答案),并重新启动sinopia服务器
- 运行
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 adduser
login。 ( 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