带作用域的npm包对应的Registry API查询URL是什么?
正确查询公开带作用域npm包的API URL
这问题我之前踩过坑!其实带作用域的npm包查询URL的关键是处理好路径里的特殊字符,npm registry对这类包的路径有特定要求,下面给你两种靠谱的正确访问方式:
方式1:对作用域与包名间的斜杠做URL编码
像@types/node这类带作用域的包,你需要把包名里的/编码成%2F,所以正确的查询URL是:
https://registry.npmjs.org/@types%2Fnode
顺手加个末尾斜杠也能正常访问:
https://registry.npmjs.org/@types%2Fnode/
方式2:用npm CLI快速验证(可选)
要是你不确定地址对不对,直接用npm自带命令查包的registry信息就行,执行这条命令:
npm view @types/node registry
返回的地址就是经过正确编码的路径,和上面的格式完全一致。
至于为啥直接访问https://registry.npmjs.org/@types/node会返回404?因为registry服务器会把这个路径解析成@types目录下的node资源,但实际上npm的registry是把带作用域的包当作单个路径节点处理的,必须通过编码斜杠来避免被错误拆分。
另外你提到的搜索端点/-/v1/search?text=@types/node能正常用,是因为搜索接口是基于文本匹配的,不需要严格的路径格式,所以直接输带作用域的包名就行。
内容的提问来源于stack exchange,提问作者MrSimonEmms
相关产品推荐
相关产品推荐

