わかりましたので、ようやく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を操作することにより、シノピアにカスタムユーザーを追加することができました。
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サーバーがサポートされていないコマンドでエラーをスローするため失敗します。
まず第一に、それは「鶏と卵」の問題ではありません。
「npm adduser」は次の2つのことを行います。
Sinopiaは、ユーザーが存在しない場合は文句を言いますが、存在する場合は成功を報告します。
だから、あなたがしなければならないことはこれです:
npm adduser --registry http://internal-npm:4873/
はい、「adduser」コマンドは、実際には新しいユーザーを追加しないため、混乱を招きます。ユーザーが構成に存在することを確認するだけです。
必要に応じて、「npm login」コマンドを使用できます。まったく同じことをしても、混乱は少なくなります。 :)
次に、これをpackage.jsonに追加します。
"publishConfig": {
"registry": "http://internal-npm:4873/"
}
このように、npmは、デフォルトのレジストリであっても、それをパブリックレジストリに公開しません。
最後に、同じnpmrcで2つのレジストリ(npmjsとプライベートのレジストリ)を同時に使用することはできません。それは 安全性が低い でも思っているよりです。
ほとんどの場合は問題ありませんが、両方を使用するhaveがある場合(たとえば、パブリックパッケージとプライベートパッケージを同時に維持する場合)、 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
すべての場合にパスワードを公開レジストリに公開することを防ぎます。
Sinopia READMEで正確に何をすべきかがわかります 。
新しいユーザーを追加する
新しいユーザーを追加するユーティリティはありませんが、少なくともコマンドラインでnodeを使用してパスワードを生成できます。構成を編集し、ユーザーを手動で追加する必要があります。
ノードを起動し、「newpass」をハッシュを取得するパスワードに置き換えて次のコードを入力します。
$ node > crypto.createHash('sha1').update('newpass').digest('hex') '6c55803d6f1d7a177a0db3eb4b343b0d50f9c111' > [CTRL-D]
新しいユーザーをconfig.yamlファイルに挿入します。
次に、npm adduser
を実行してログインします。 (adduser
はアカウントの作成とログインの両方に使用されるコマンドです。sinopiaは作成部分をサポートしていません。)
オプション1は機能しますが、私はそれで満足していません。だから私は検索を続けます
はい、有効なnpmjs.orgユーザーを追加したら、レポで切り替えます:
npm config set registry http://internal-npm:4873/
同じユーザー/パスがSinopiaに存在する場合、発行コマンドは機能します
npm publish --registry=http://internal-npm:4873/
欠点は、誰かがプライベートレジストリを明示的に設定するのを忘れると、パブリッシュがグローバルnpmjs.orgで100%動作することであり、これは災害になります。
私はシノピアの貢献者を助けます:)ここを参照してください: https://github.com/rlidwka/sinopia/issues/230#issuecomment-9182566
バージョン0.13の時点で、Sinopiaは次の方法で新しいユーザーの作成をサポートしています。
npm adduser --registry example.com:port
詳細については、以下を参照してください。 新しいSINOPIAユーザーの作成方法