有问题吗?想要报告问题?联系JFrog支持

跳到元数据的末尾
进入元数据的开始

概述

Artifactory为管理npm包提供了全面的支持,并确保最佳和可靠的访问npmjs.org。将多个npm注册表聚合在一个虚拟存储库下,Artifactory可以通过一个URL访问所有的npm包,用于上传和下载。

作为一个完全成熟的npm注册表高级工件管理, Artifactory的支持npm提供:

  1. 从Artifactory提供npm包到npm命令行工具的所有存储库类型的能力
  2. 为Artifactory本地存储库中托管的npm包计算元数据
  3. 访问远程npm注册表(例如https://registry.npmjs.org)通过远程存储库哪些提供了常用的代理和缓存功能
  4. 从一个URL访问多个npm注册表的能力虚拟存储库.这克服了npm客户端一次只能访问一个注册表的限制。
  5. 兼容性NPM命令行工具部署和删除包等。
  6. 支持灵活的NPM存储库布局它允许你组织你的NPM包,并根据项目或开发团队分配访问权限。

Npm版本支持

Artifactory支持NPM 1.4.3及以上版本。

页面内容


配置

本地Npm登记处

要在本地存储库中计算npm包元数据,使它们实际上成为npm注册表,请设置包类型npm创建存储库时:

仓库布局

Artifactory允许你为你的npm注册表定义任何布局。为了根据你的自定义布局上传包,你需要使用npm包。

这将为你的包创建.tgz文件,然后你可以将其上传到本地npm存储库中的任何路径。

远程Npm注册表

一个远程存储库在Artifactory中定义的缓存代理,用于在远程URL上管理的注册中心,例如https://registry.npmjs.org

从远程存储库请求的工件(如tgz文件)将根据需要缓存。你可以从远程存储库缓存中删除下载的构件,但是,你不能手动将构件部署到远程npm注册表中。

定义一个远程存储库来代理一个远程npm注册表,请遵循以下步骤:

  1. 管理模块,在存储库|远程,单击“新”。
  2. 在“新建存储库”对话框中,设置包类型npm,设置库的关键属性中指定远程注册中心的URLURL字段,如下所示
  3. 点击“保存并完成”

虚拟Npm注册表

Artifactory中定义的虚拟存储库聚合来自本地和远程存储库的包。
这允许你通过为虚拟存储库定义的一个URL访问本地托管的npm包和远程代理的npm注册表。
要定义一个虚拟npm注册表,请创建一个虚拟存储库,设置包类型npm,的基础本地和远程NPM注册中心基本设置选项卡。

单击“Save & Finish”创建存储库。

高级配置

Npm虚拟存储库高级配置

下面的田野外部依赖重写连接到自动重写外部依赖项用于需要它们的NPM包。

启用依赖项重写

勾选后,将启用自动重写外部依赖项。

用于缓存的远程存储库

由该虚拟存储库聚合的远程存储库,外部依赖项将在其中缓存。

白名单模式

ant风格路径表达式的白列表,指定可以从哪里下载外部依赖项。默认情况下,设置为**这意味着依赖关系可以从任何外部源下载。

例如,如果希望将外部依赖项限制为只能从github.com,你应该补充* * / github.com/ * *(并删除默认值**表达式)。


使用Npm命令行

Npm存储库必须在路径中加上api/ Npm前缀

当通过Artifactory访问npm存储库时,存储库URL必须加上前缀api / npm在路上。这适用于所有npm命令,包括npm安装而且npm发布。

例如,如果你单独使用Artifactory或作为本地服务使用,你可以使用下面的URL访问你的npm存储库:

http://localhost:8081/artifactory/api / npm /<库关键>

或者,如果您使用Artifactory SaaS, URL将是:

https:// < server name > .jfrog。io / <服务器名> /api / npm /<库关键>

要使用npm命令行,你需要确保npm已经安装。的最新版本中包含了Npmnode . js

详情请参阅通过包管理器安装Node.jsGitHub或npm README页面

一旦你创建了你的npm存储库,你可以在树浏览器中选择它并单击给我介绍获取代码片段,你可以使用npm命令行工具来改变你的npm注册表URL,部署和解析包。

设置我对话框

用一个指向Artifactory中的npm存储库的URL替换默认注册表(下面的例子使用了一个带键的存储库npm-repo):

替换默认注册表
NPM配置设置注册表http://localhost:8081/artifactory/api/npm/npm-repo

我们建议引用虚拟存储库URL作为注册表。这为您提供了灵活性重新配置和聚合您部署的NPM包的其他外部源和本地存储库。

注意,如果您这样做,您需要使用——注册表属性时指定要将包发布到其中的本地存储库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发布(部署包)

设置证书

npm命令行工具需要敏感的操作,例如发布,使用基本HTTP身份验证与服务器进行身份验证。

要支持身份验证,您需要编辑您的.npmrc文件并输入以下内容:

  • 您的Artifactory用户名和密码(已格式化用户名:密码),Base64编码的字符串
  • 你的电邮地址(npm发布将不工作,如果您的电子邮件没有指定.npmrc
  • 你需要设置Always-auth = true

直接从Artifactory获取.npmrc条目

你可以使用下面的命令直接从Artifactory获取这些字符串:

$ curl -uadmin:password "http://localhost:8081/artifactory/api/npm/auth" _auth = ywrtaw46e0rfu2vkzx1uofraaxh1y0t3bhn4c2rctviewnjf3pt0 = email = myemail@email.com always-auth = true

.npmrc文件位置

窗口:% userprofile % \ .npmrc

Linux:~ / .npmrc

目前不支持

Artifactory不支持npm adduser命令,因此要发布包,您需要确保您之前已经在Artifactory上创建了一个用户

部署软件包

有两种方法将包部署到本地存储库:


在没有匿名访问的情况下使用Artifactory

默认情况下,Artifactory允许匿名访问npm存储库。定义在管理模块下安全|一般.详情请参阅允许匿名访问
控件,如果希望能够跟踪用户如何与存储库交互,则需要取消选中允许匿名访问设置。这意味着用户将需要输入所述的用户名和密码设置证书以上。


使用OAuth凭证

Artifactory使用GitHub Enterprise作为它的默认OAuth提供程序.如果您有帐户,在使用时可以使用您的GitHub企业登录详细信息进行身份验证npm登录。


Npm搜索

Artifactory支持多种搜索工件的方法。详情请参阅搜索工件

Artifactory还支持NPM搜索[搜索词…],但是,由于以下原因,软件包在发布后可能无法立即提供:

当将包发布到本地存储库时,Artifactory计算搜索索引是异步的,在索引新发布的包之前,将等待“安静期”的结束。

由于虚拟存储库可能包含本地存储库,因此由于相同的原因,新发布的包可能不会立即可用。

您可以通过设置以下系统属性(中)来指定索引“静默期”(包发布以来的时间)美元ARTIFACTORY_HOME / etc / artifactory.system.properties)。

artifactory.npm.index。quietPeriodSecs = 60 artifactory.npm.index.cycleSecs = 60

在远程存储库的情况下,只有当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客户端在与npm注册表通信之前将斜杠字符('/')编码为它们的ASCII表示("%2f")。如果您运行Tomcat作为您的HTTP容器(Artifactory的默认容器),这将生成一个“HTTP 400”错误,因为Tomcat默认不允许编码的斜杠。为了一起工作npm作用域包,您可以o控件中定义以下属性,以撤销此默认行为catalina.propertiesTomcat文件:

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true

注意,自从Artifactory4.4.3版本,绑定的Tomcat默认配置为启用编码的斜杠。如果您使用的是以前的版本,则需要调整上面的Tomcat属性。

URL解码和反向代理

如果Artifactory运行在反向代理之后,请确保禁用代理本身的URL解码,以便使用npm作用域包。

对于Apache,添加“AllowEncodedSlashes NoDecode指令在块内。


         

为范围注册表配置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 3.5.3中,你可以使用下面的命令直接从Artifactory获取这些字符串:

$ curl -uadmin:密码“http://localhost:8081/artifactory/api/npm/npm-local/auth/jfrog”
@jfrog:注册表= http://localhost: 8080 / artifactory / api / npm / npm-local /
/ / localhost: 8080 / artifactory / api / npm / npm-local /: _password = QVA1N05OaHZTMnM5Qk02RkR5RjNBVmF4TVFl
/ / localhost: 8080 / artifactory / api / npm / npm-local /:用户名= admin
/ / localhost: 8080 / artifactory / api / npm / npm-local /:电子邮件= admin@www.si-fil.com
/ / localhost: 8080 / 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使用外部包的最佳实践,您可以指定一个“安全”白名单,从中可以下载依赖项,并将其缓存到Artifactory中,并配置为重写依赖项,以便Npm客户端通过虚拟存储库访问依赖项,如下所示:

  • 检查启用依赖项重写在Npm虚拟库中高级配置
  • 指定可以从中下载依赖关系的外部资源的白名单模式。2022世界杯阿根廷预选赛赛程
  • 指定应该在其中缓存这些依赖项的远程存储库。
    最好为此目的配置一个专用的远程存储库,这样更容易维护。

在下面的例子中,外部依赖项将被缓存在“npm”远程存储库中,并且只包从https://github.com/jfrogdev允许被缓存。

重写工作流

  1. 当下载Npm包时,Artifactory会分析包所需的依赖项列表。

  2. 如果任何依赖项托管在外部资源上(例如on2022世界杯阿根廷预选赛赛程github.com),而这些资源已列在白名单2022世界杯阿根廷预选赛赛程内,

    1. Artifactory将从外部资源下载依赖项。

    2. Artifactory将在配置为缓存外部依赖项的远程存储库中缓存依赖项。

    3. Artifactory将修改包中依赖项的条目. json在将文件返回到Npm客户端之前,在Artifactory远程存储库缓存中指定它的新位置。

  3. 因此,每当Npm客户端需要访问依赖项时,它将从Artifactory远程存储库缓存中的新位置进行供应。


查看单个Npm包信息

Artifactory让你可以直接从UI中查看npm包的元数据。

树浏览器,向下钻取选择要检查的TGZ文件。元数据显示在Npm信息选项卡。