当我在企业JFrog上设置了npm存储库时,便创建了以下5个npm存储库:
npm-local
npm-release local
npm-generic-local
npm-central
npm-central-cache
每当我尝试使用 npm publish 命令发布角度库时,我都可以将工件推送到 npm-local 存储库。但是,当我尝试进行npm安装(在package.json中同时提到了public和我们的依赖项)时,它会抛出 404 not found错误,看起来它无法从提取公共工件npmjs注册表 link。
类似地,如果我指向JFrog中的 npm-central 存储库,则能够从npmjs注册表中提取公共工件,但无法在此处发布我们的角度库。抛出400错误的请求错误。(在错误日志下方)
18 http fetch PUT 400 <JFrog_Url>/api/npm/npm-release-local/@ca-platform%2fcore 1592ms
19 verbose stack Error: 400 Bad Request - PUT <JFrog_Url>/api/npm/npm-release-local/@ca-platform%2fcore
19 verbose stack at res.buffer.catch.then.body (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-registry-fetch\check-response.js:104:15)
19 verbose stack at process._tickCallback (internal/process/next_tick.js:68:7)
20 verbose statusCode 400
21 verbose pkgid @ca-platform/core@1.0.0
22 verbose cwd C:\Decomposition Projects\ca-ui-platform\ca-ui-platform\dist\core
23 verbose Windows_NT 10.0.17763
24 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "publish"
25 verbose node v10.19.0
26 verbose npm v6.13.4
27 error code E400
28 error 400 Bad Request - PUT <JFrog_Url>/api/npm/npm-release-local/@ca-platform%2fcore
29 verbose exit [ 1, true ]
可以,任何人都可以帮助我了解我必须在JFrog中指向哪个npm存储库,以便我可以推送我们的库以及从同一npm存储库中提取公共工件。
PS:我正在使用.npmrc文件中的以下配置指向JFrog上的任何npm存储库:
strict-ssl=false
registry=<JFrog_Url>/api/npm/npm-central/
_auth = <auth_token>
email = <email-id>
username= <username>
always-auth=true
答案 0 :(得分:3)
npm-local npm-release本地 根据我的理解,npm-generic-local都是本地存储库。您可以在Artifactory中从本地存储库发布和下载软件包。
但是,npm-central是指向npmjs.com的远程存储库。 远程存储库允许您代理上游(在本例中为npmjs),但不允许您向其发布新软件包。
您希望能够从单个存储库发布和解析(即下载)软件包,而这正是虚拟存储库发挥作用的地方。
虚拟存储库使您可以在一个存储库中聚合一个或多个本地,远程甚至虚拟存储库,从而可以访问上述所有存储库中的所有软件包。 它将允许您下载和发布软件包。
因此,我建议创建一个虚拟存储库>例如聚合npm-local和npm-central(您可以添加已添加的所有远程和本地存储库)>指定默认部署存储库,这是其中的本地存储库已发布的软件包将存储在(即,当您使用“ npm publish”命令时)>更新您的.npmrc文件(不要忘记对新的虚拟存储库进行“ npm login”登录)。
这样,您将拥有一个(虚拟)存储库,您可以从npmjs下载软件包(以及本地存储库中的软件包),并将软件包发布到所选的本地存储库中。