好的,所以我终于设法使用Sinopia获得私人npm注册表。 但我无法发布任何内容。
TL; DR:Sinopia不支持 npm adduser ,但拥有自己的用户 管理。此外,npm需要在 npm publish 之前创建的有效用户 通过 npm adduser ,由于内部Sinopia服务器而失败 在不支持的命令中抛出错误....
剧情简介:
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服务器在不支持的命令处抛出错误。
答案 0 :(得分:25)
首先,它不是鸡肉和鸡蛋"问题
" npm adduser"做两件事:
如果用户不存在,Sinopia会抱怨,如果确实存在,它会很乐意报告成功。
所以,你需要做的是:
npm adduser --registry http://internal-npm:4873/
是的," 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