如何排除NPM问题

帕特里克·罗素
2022-05-03 18:43

相关版本:这个信息与…有关Artifactory版本6。X及以上

npm客户被许多应用程序管道使用拉javascript的依赖性web UI功能。它有几个唯一API调用这可能会导致错误如果Artifactory处理不当。在对这些错误进行故障排除时,最好进行比较应该发生的当这些调用针对您的系统执行时目前经历.通过模拟可以消除大量的噪声每一个步骤您的客户端正在检查Artifactory发送的HTTP错误代码。

一般来说,这些是你可能会遇到的错误代码,以及你接下来应该探索答案/解决方案的地方:

401:身份验证问题,意味着用户没有使用正确的用户名/密码
403:授权问题,意味着用户不能访问所请求的资源
404:资源未找到,请检查存储库是否有资源
400:不正确的请求,使用cURL获取原因短语
50 x:服务器问题,检查artifactory-service.log (7. x)artifactory.log (6. x)

使用旋度

Libcurl终端应用程序能基本运行REST API命令,如GET或PUT选项。你Artifactory请求日志将显示Docker客户端使用的确切API命令。你可以用那个失败(如request.log文件中所列)或使用其中之一例子尝试获取有关所遇到问题的进一步信息,以及可能的下一步步骤。

基本用法(带#comments):

curl -uadmin # artifactory -username - vvv# verbosy -k #ignore-insecure-SSL -XGET #GET-request http:///artifactory/api/system/ping

cURL默认使用GET请求。其他命令,比如,要求字段,以及一个(通常是JSON)数据有效载荷.下面是一个PUT命令示例:

curl -uadmin:password -XPUT -H"Content-type: Application/json" -data " {"name":"test-group"} " http:///artifactory/api/security/groups/test-group . curl -uadmin:password -XPUT -H"Content-type: Application/json" -data " {"name":"test-group"}

NPM登录

当你运行一个npm登录,npm客户端将提示特此奉告:

jfrog@jfrog:~/development/npm$ npm登录
用户名:admin
密码:
电子邮件:(这是公开)admin@admin.com

在后台npm将运行一个请求检索令牌以供将来使用:

10365 | 20180523134454 | | 127.0.0.1请求匿名| |把| / api / npm / npm / - / user / org.couchdb.user:管理HTTP / 1.1 | 201 | 153 |

NPM安装(非作用域)

当你运行npm install时,npm客户端获取元数据,然后返回包:

NPM安装foobar

1.NPM客户端请求元数据包装上:

2498 | 20180523134502 | | 127.0.0.1请求管理| | | / api / npm / npm / foobar HTTP / 1.1 | 200 | 0 |

2.元数据包含下载链接tar.gz文件:

386 | 20180523134503 | | 127.0.0.1请求管理| | | / api / npm npm / foobar /——/ foobar-1.1.0.tgz HTTP / 1.1 | 200 | 10240 |

还有依赖文件:

20180523134506 | | 26日请求| 127.0.0.1管理| | | / api / npm npm / busybox /——/ busybox-2017.3.22.tgz HTTP / 1.1 | 200 | 518376 |

元数据是从“package.json"文件在每一个NPM .tgz文件:


“名称”:“@types / webpack”,
“版本”:“3.8.5”,
"description": "TypeScript定义的webpack",
“许可证”:“麻省理工学院”,
“贡献者”:(
[…]
“主要”:“”,
“库”:{
“类型”:“git”,
“url”:“https://www.github.com/DefinitelyTyped/DefinitelyTyped.git”
},
“脚本”:{},
“依赖”:{
“@types / tapable”:“*”,
“@types / uglify-js”:“*”,
“@types /节点”:“*”
},
:“typesPublisherContentHash 9 cb451892d84836f57c4925bdc1308f145e527eed87c3610683ada4330d844ca”,
“typeScriptVersion”:“2.0”

NPM安装(作用域包)

NPM安装@angular/cli

对于有作用域的包(@angular/router), npm install使用一个编码的斜杠在范围包名.这将显示为% 2 f在你的Artifactory请求日志中:

166 | 20180731002214 | | 127.0.0.1请求管理| | | / api / npm / npm / @angular % 2 fcli HTTP / 1.1 | 200 | 0 |
190 | 20180731002214 | | 127.0.0.1请求管理| | | / api / npm / npm / @angular / cli /——/ cli-6.1.1.tgz HTTP / 1.1 | 200 | 128696 |

有两个(2)个位置编码的斜杠可能会失败。第一个是在Artifactory JVM选项(" -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true "),默认情况下启用。第二个打开了反向代理.Artifactory自己生成的反向代理设置有正确的配置,以保持斜杠不编码:

# #proxy_pass行中的“/”强制Nginx / Apache不解码已编码的字符
proxy_pass http://localhost: 8081 / artifactory /;

NPM发布

要将npm包发布到Artifactory,你需要配置你的package.json指向你的Artifactory npm存储库:


“名称”:“测试包”,
“版本”:“0.0.16”,
“描述”:“hahahahah”,
“主要”:“index.js”,
"脚本":{
"test": "echo "错误:没有指定测试" && exit 1"
},
“作者”:“拍”,
“许可证”:“ISC”,
" publishConfig ": {
“注册表”:“http://localhost: 8081 / artifactory / api / npm / npm /”
},
“依赖”:{
“角”:“^ 1.6.4”,
:“busybox ^ 2017.3.22”,
“克隆”:“^ 2.1.1”,
:“uglify-js ^ 2.7.5”
},
“devDependencies”:{},
“维修人员”:[
{" name ":“吉米”,“电子邮件”:“jim@jimmy.com”},
{" name ":“弗兰克”,“电子邮件”:“frank@west.com”}]

这样做之后,您就可以运行了npm发布要部署gz文件到本地存储库:

npm发布

(request.log)
96 | 20180524084923 | | 127.0.0.1请求管理| |把| / api / npm / npm /测试包HTTP / 1.1 | 201 | 1695 |


下面是一个示例curl命令,它模拟发布。你需要手动下载一个NPM .tar.gz文件来执行这个命令:

curl -XPUT -u admin -T test-package-1.0。tgz http:// < artifactory.com > / artifactory / api / npm / npm-local /测试包

依赖项重写

npm的一个常用设置是启用依赖项重写虚拟存储库的选项。这使得Artifactory可以缓存GitHub元数据与NPM包和关联本地服务内容。当将远程存储库建立为依赖项缓存时,将使用_external文件夹将被创建用于存储GitHubgz文件:

用户添加图片

时不时地,你会发现Artifactory无法访问GitHub。如果您在日志中看到此类事件,请考虑一下禁用依赖项重写以查看是否解决了该问题。