仓库布局
Artifactory允许你为你的npm注册表定义任何布局。为了根据你的自定义布局上传包,你需要使用npm包
命令。这将为你的包创建.tgz文件,然后你可以将其上传到本地npm存储库中的任何路径。
远程npm注册表
一个远程存储库在Artifactory中定义的缓存代理,用于在远程URL上管理的注册中心,例如https://registry.npmjs.org
.从远程存储库请求的工件(如TGZ文件)将根据需要缓存。你可以从远程存储库缓存中删除下载的构件,但是,你不能手动将构件部署到远程npm注册表中。
定义一个远程存储库来代理一个远程npm注册表:
- 在政府模块,在存储库|存储库|远程,点击新的远程存储器y。
- 在新的远程存储库对话框:
- 设置包类型来npm而且的库的关键价值。
- 控件中指定远程注册中心的URLURL字段。
- 点击保存&完成.
虚拟npm注册表
Artifactory中定义的虚拟存储库聚合来自本地和远程存储库的包。
这允许你通过为虚拟存储库定义的一个URL访问本地托管的npm包和远程代理的npm注册表。
定义一个虚拟npm注册表:
- 在政府模块,在存储库|存储库|虚拟,点击新虚拟存储库.
- 在新虚拟存储库对话框,设置包类型来npm。
- 方法中要包含的底层本地和远程npm注册表基本设置选项卡。
- 点击保存&完成创建存储库。
高级配置
下面的田野外部依赖重写连接到自动重写外部依赖项对于需要它们的NPM包。
启用依赖项重写 |
选中后,将重写外部依赖项。 |
用于缓存的远程存储库 |
由该虚拟存储库聚合的远程存储库,外部依赖项将在其中缓存。 |
模式允许列表 |
ant风格路径表达式的允许列表,指定可以从哪里下载外部依赖项。默认情况下,设置为 例如,如果希望将外部依赖项限制为只能从 |
使用npm命令行
Npm存储库必须在路径中加上api/ Npm前缀
当通过Artifactory访问npm存储库时,存储库URL必须加上前缀api / npm在路上。这适用于所有npm命令,包括npm安装
而且npm发布。
例如,如果你单独使用Artifactory或作为本地服务使用,你可以使用下面的URL访问你的npm存储库:
http://localhost:8081/artifactory/api / npm /<库关键>
或者,如果您正在使用Artifactory Cloud, URL将是:
https:// < server name > .jfrog.io / artifactory /api / npm /<库关键>
要使用npm命令行,你需要确保npm已经安装。的最新版本中包含了Npmnode . js.
详情请参阅通过包管理器安装Node.jsGitHub或npm README页面.
一旦你创建了你的npm存储库,你可以在树浏览器中选择它并单击给我介绍获取代码片段,你可以使用npm命令行工具来改变你的npm注册表URL,部署和解析包。
设置默认注册表
为了让你的npm命令行客户端使用Artifactory,你首先需要使用以下命令设置一个默认的npm注册表和一个Artifactory npm存储库(下面的例子使用一个名为npm-repo
):
npm设置注册表http://:8081/artifactory/api/npm/npm-repo/
对于有作用域的包,使用以下命令:
npm config set @:registry http:// :8081/artifactory/api/npm/npm-repo/
验证npm客户端
一旦你设置了默认注册表,你需要通过以下两种方式中的一种来验证npm客户端:
- 运行
npm登录
命令 - 使用基本身份验证。
使用npm登录
身份验证使用npm登录
在5.4版中引入。
在npm客户端中运行以下命令。当提示时,提供您的Artifactory登录凭据:
npm登录
运行此命令后,Artifactory将创建一个不可过期访问令牌客户端使用它来验证Artifactory的后续和npm安装
npm发布
行动。
如果令牌从Artifactory中删除,客户机将不得不再次登录以接收新的令牌。
npm-login限制
如果管理员与瞬态用户创建访问令牌,npm登录
将失败,因为用户没有在Artifactory注册。
使用基本认证
若要支持基本身份验证,请编辑您的.npmrc
文件并输入以下内容:
- 您的Artifactory用户名和密码(已格式化
用户名:密码
),Base64编码的字符串 - 你的电邮地址(
npm发布
将不工作,如果您的电子邮件没有指定.npmrc
) - 集
Always-auth = true
.npmrc文件位置
窗口:% userprofile % \ .npmrc
Linux:~ / .npmrc
直接从Artifactory获取.npmrc条目
运行以下命令直接从Artifactory检索这些字符串:
$ curl -uadmin:http:// :8081/artifactory/api/npm/auth
下面是一个回应的例子:
_auth = ywrtaw46e0rfu2vkzx1uofraaxh1y0t3bhn4c2rctviewnjf3pt0 = email = myemail@email.com always-auth = true
此外,如果你也在使用有作用域的包,你还需要运行以下命令:
curl -uadmin:< certificential > http://:8081/artifactory/api/npm/npm-repo/auth/ . curl -uadmin:< certificate > http:// :8081/artifactory/api/npm/npm-repo/auth/
中将此命令的响应粘贴到~ / .npmrc
文件在您的机器上(在Windows中,% USERPROFILE % / .npmrc
).
解析npm包
一旦配置了npm命令行工具,每一个npm安装
命令将从上面指定的NPM存储库中获取包。
例如:
$ npm install request npm http GET http://localhost:8081/artifactory/api/npm/npm-repo/request npm http 200 http://localhost:8081/artifactory/api/npm/npm-repo/request npm http GET http://localhost:8081/artifactory/api/npm/npm-repo/request/-/request-2.33.0.tgz npm http 200 http://localhost:8081/artifactory/api/npm/npm-repo/request/-/request-2.33.0.tgz
npm审计
Artifactory现在支持npm审计
,允许你获取NPM项目依赖树中的漏洞。
审计报告包含有关依赖关系的安全漏洞的信息,并可以通过提供npm命令和进一步故障排除的建议来帮助修复漏洞。
默认情况下,npm虚拟存储库将启用该功能,这些虚拟存储库至少聚合了一个支持npm审计的远程存储库。例如,指向的远程存储库https://registry.npmjs.org
或Artifactory智能远程存储库。
拥有Artifactory Pro X / Enterprise / Enterprise+许可证的JFrog X射线用户将获得一份增强的审计报告,其中包括来自X射线数据库的安全漏洞。当Xray配置为与Artifactory一起工作时,即使不连接到任何远程存储库,也可以从头生成审计报告。
用户提供读权限在NPM虚拟存储库中可以使用以下NPM命令:
命令 | 描述 |
---|---|
npm审计 |
返回一个基于npm客户端发送的依赖树的漏洞报告https://npmjs.com/ 并可选增强Jfrog x射线。 |
NPM审计修复 |
获取相同的报告npm审计 并试图自动根据报告中的建议采取行动。 |
要更改npm审计报告的来源,请设置npm.default.audit.provider
系统属性(默认)https://registry.npmjs.org
)转至所需的审核提供者网址。
npm Publish(部署包)
设置证书
npm命令行工具需要敏感的操作,例如发布
验证如下所述验证npm客户端以上。
部署软件包
有两种方法将包部署到本地存储库:
- 编辑你的
package.json
文件并添加publishConfig部分到本地存储库:“publishConfig”:{“注册表”:“http://localhost: 8081 / artifactory /api / npm/ npm-local / "}
- 类提供本地存储库
npm发布
命令:NPM publish——registryhttp://localhost:8081/artifactory/api / npm/ npm-local /
指定最新版本
默认情况下,最新的
在Artifactory的npm注册表中,包的版本是最高的SemVer版本号。您可以重写此设置,以便Artifactory将最近上传的包作为最新的
的版本。要做到这一点,在Artifactory的系统。属性文件,添加或设置:
artifactory.npm.tag.tagLatestByPublish = true
在没有匿名访问的情况下使用Artifactory
默认情况下,Artifactory允许匿名访问npm存储库。定义在管理模块下安全|一般.详情请参阅允许匿名访问.
如果希望跟踪用户如何与存储库交互,则需要禁用允许匿名访问设置。这意味着用户将需要输入所述的用户名和密码设置证书以上。
使用OAuth凭证
Artifactory使用GitHub Enterprise作为它的默认OAuth提供程序.如果您有帐户,您可以在使用时使用您的GitHub企业登录详细信息进行身份验证npm登录
命令。
npm搜索
Artifactory支持多种搜索工件的方法。详情请参阅搜索Artifacts_OLD.
Artifactory还支持NPM搜索[搜索词…]。
但是,由于以下原因,这些软件包在发布后可能无法立即提供:
- 本地存储库:当将包发布到本地存储库时,Artifactory计算异步搜索索引。
- 虚拟存储库:由于虚拟存储库可能包含本地存储库,因此新发布的包可能不会立即可用。
在远程存储库的情况下,只有当Artifactory根据检索缓存周期设置。
Artifactory用两个属性注释每个部署或缓存的npm包:npm.name
而且npm.version。
您可以使用属性搜索根据名称或版本搜索NPM包。
清理本地npm缓存
npm客户端保存已下载的缓存包,以及JSON元数据响应(命名为.cache.json
).
JSON元数据缓存文件包含npm客户端用来与服务器通信的url,以及之前请求发送的其他ETag元素。
我们建议在第一次使用Artifactory之前删除npm缓存(包和元数据响应)。这是为了确保您的缓存只包含来自Artifactory请求的元素,而不是直接来自Artifactory的https://registry.npmjs.org
.
Windows系统默认的缓存目录为% APPDATA % \ npm-cache
而在Linux上则是~ / .npm。
npm作用域包
Artifactory全力支持NPM范围包.这种支持对用户是透明的,不需要对npm客户端进行任何不同的使用。
Npm '斜杠'字符编码
默认情况下,npm客户端编码斜杠字符(/
)转换为它们的ASCII表示形式(% 2 f
),然后再与NPM注册表通信。如果您运行Tomcat作为您的HTTP容器(Artifactory的默认值),这会生成一个HTTP 400错误,因为Tomcat默认情况下不允许编码的斜杠。为了一起工作npm作用域包,您可以o控件中定义以下属性,以撤销此默认行为catalina.properties
Tomcat文件:
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true
您还可以添加-Dorg.apache.tomcat.util.buf.UDecoder。ALLOW_ENCODED_SLASH:真到Artifactory系统YAML下extraJavaOpts
部分。绑定的Tomcat在默认情况下配置为启用编码的斜杠。
URL解码和反向代理
如果Artifactory运行在反向代理之后,请确保禁用代理本身的URL解码,以便使用npm作用域包。
对于Apache,添加AllowEncodedSlashes上内部指令
<虚拟主机*:xxx
>块。
为范围注册表配置npm客户端
使用登录凭证
作用域可以与单独的注册中心相关联。这允许你无缝地使用来自公共npm注册表和一个或多个私有注册表的混合包。
例如,您可以关联范围@jfrog
通过登记处http://localhost:8081/artifactory/api/npm/npm-local/
手动更改您的~ / .npmrc
文件,并添加以下配置:
@jfrog:registry=http://localhost:8081/artifactory/api/npm/npm-local/ //localhost:8081/artifactory/api/npm/npm-local/:_password=cGFzc3dvcmQ= //localhost:8081/artifactory/api/npm/npm-local/:username=admin //localhost:8081/artifactory/api/npm/npm-local/:email=myemail@email.com //localhost:8081/artifactory/api/npm/npm-local/:always-auth=true
直接从Artifactory获取.npmrc条目
你可以使用下面的命令直接从Artifactory获取这些字符串:
$ curl -uadmin:密码“http://localhost:8081/artifactory/api/npm/npm-local/auth/jfrog”
@jfrog:注册表= http://localhost: 8081 / artifactory / api / npm / npm-local /
/ / localhost: 8081 / artifactory / api / npm / npm-local /: _password = QVA1N05OaHZTMnM5Qk02RkR5RjNBVmF4TVFl
/ / localhost: 8081 / artifactory / api / npm / npm-local /:用户名= admin
/ / localhost: 8081 / artifactory / api / npm / npm-local /:电子邮件= admin@www.si-fil.com
/ / localhost: 8081 / artifactory / api / npm / npm-local /: always-auth = true
用户邮箱
当使用作用域身份验证时,npm需要一个有效的电子邮件地址。请确保您在Artifactory用户配置文件中包含了您的电子邮件地址。
该密码只是您的Artifactory密码的base64编码,与旧的身份验证配置.
推荐npm命令行工具2.1.9及更高版本。
虽然npm作用域包从npm命令行工具的2.0版本就已经可用,但我们强烈建议只从npm命令行工具的2.1.9版本使用Artifactory的npm作用域包。
自动重写外部依赖项
npm客户端请求的包经常使用包的外部依赖关系。包. json
文件。这些依赖关系可能反过来需要其他依赖关系。因此,当下载一个npm包时,你可能无法完全看到原始包所需的全部依赖集(无论是直接的还是传递的)。因此,您可能会从未知的外部资源下载恶意依赖项。2022世界杯阿根廷预选赛赛程
为了管理这种风险,并维护通过Artifactory使用外部包的最佳实践,您可以指定一个“安全的”Allow List,从该列表中可以下载依赖项,并缓存在Artifactory中,并配置为重写依赖项,以便nPM客户端通过虚拟存储库访问依赖项,如下所示:
- 选择启用依赖项重写复选框在NPM虚拟存储库中高级配置.
- 指定外部资源的Allow List模式,从中可以下载依赖项。2022世界杯阿根廷预选赛赛程
- 指定应该在其中缓存这些依赖项的远程存储库。
最好为此目的配置一个专用的远程存储库,这样更容易维护。
在下面的例子中,外部依赖项被缓存在“npm”远程存储库中,并且只有来自的包被缓存https://github.com/jfrogdev
允许被缓存。
Artifactory支持所有可能的速记解析器,包括以下内容:
git + ssh: / / user@hostname:项目。git# commit-ish git + ssh: / / user@hostname /项目。git# commit-ish git + https://git@github.com/ <用户名> / <文件名> .
重写工作流
当下载一个npm包时,Artifactory会分析包所需的依赖项列表。
如果任何依赖项托管在外部资源上(例如on2022世界杯阿根廷预选赛赛程
github.com
),并在允许列表中指定这些2022世界杯阿根廷预选赛赛程资源,-
Artifactory将从外部资源下载依赖项。
Artifactory将在配置为缓存外部依赖项的远程存储库中缓存依赖项。
Artifactory将修改包中依赖项的条目包. json在将文件返回到Npm客户端之前,在Artifactory远程存储库缓存中指定它的新位置。
因此,每次npm客户端需要访问依赖项时,它都会从Artifactory远程存储库缓存中的新位置被提供。
SemVer支持
Tnpm虚拟库的外部依赖重写功能支持额外的SemVer表达式,例如semver: 4. x.0。
如果您遇到SemVer问题,您可以使用新的特性标志恢复更改,artifactory.npm.semver4j.enabled
,通过将其值更改为false。
查看单个npm包信息
Artifactory让你可以直接从UI中查看npm包的元数据。
在树浏览器,向下钻取要检查的TGZ文件。元数据显示在npm信息选项卡。
npm构建信息
你可以通过JFrog CLI运行你的npm构建,在Artifactory中存储详尽的构建信息。
JFrog CLI从您的构建代理收集构建信息,然后将其发布到Artifactory。发布后,构建信息可以在构建浏览器下构建.
有关使用JFrog CLI集成npm构建的更多细节,请参考构建npm包请参见《JFrog CLI用户指南》。