云客户?
开始免费>
升级MyJFrog >
云有什么新鲜事>





概述

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

作为一个羽翼丰满的npm注册中心先进的工件管理, Artifactory的支持npm提供:

  • 能够从所有存储库类型从Artifactory向npm命令行工具提供npm包。
  • 计算驻留在Artifactory本地存储库中的npm包的元数据。
  • 访问远程npm注册表(例如https://registry.npmjs.org)通过远程存储库它们提供常用的代理和缓存功能。
  • 从一个URL访问多个npm注册的能力虚拟存储库.这克服了npm客户端每次只能访问一个注册表的限制。
  • 兼容NPM命令行工具部署和删除包等。
  • 支持灵活的NPM存储库布局它允许您组织NPM包并根据项目或开发团队分配访问权限。
  • 支持验证远程npm存储库元数据。
  • 对npm包的SHA512支持。

npm版本支持

Artifactory支持npm 1.4.3及以上版本。


配置

本地npm注册表

要在本地存储库中计算npm包元数据,政府模块,去存储库|存储库|当地的而且设置包类型npm当您创建存储库时。


仓库布局

Artifactory允许你为你的npm注册表定义任何布局。方法来打包npm文件,以便根据自定义布局上传包npm包命令。这将为你的包创建.tgz文件,然后你可以上传到你本地npm存储库中的任何路径。

远程npm注册表

一个远程存储库在Artifactory中定义的作为在远程URL中管理的注册表的缓存代理,例如https://registry.npmjs.org.从远程存储库请求的工件(比如TGZ文件)会按需缓存。你可以从远程存储库缓存中删除下载的工件,但是,你不能手动将工件部署到远程npm注册表中。

定义一个远程存储库来代理一个远程npm注册表:

  1. 政府模块,在存储库|存储库|远程点击新的远程复位器y。
  2. 新的远程存储库对话框:
    1. 设置包类型npm而且库的关键价值。
    2. 控件中指定远程注册表的URLURL字段。
  3. 点击保存&完成

虚拟npm注册表

Artifactory中定义的虚拟存储库聚合来自本地和远程存储库的包。
这允许你通过为虚拟存储库定义的单一URL访问本地托管的npm包和远程代理的npm注册中心。

要定义一个虚拟npm注册表:

  1. 政府模块,在存储库|存储库|虚拟点击虚拟存储库
  2. 虚拟存储库对话框,设置包类型npm。
  3. 选择底层本地和远程npm注册表,以包括在基本设置选项卡。

  4. 点击保存&完成创建存储库。

高级配置

下的字段外部依赖项重写被连接到自动重写外部依赖项对于需要它们的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 Cloud, URL将是:

  • https:// < server name > .jfrog.io / artifactory /api / npm /<库关键>

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

请参考通过包管理器安装Node.js在GitHub或npm README页面

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

设置默认注册表

为了让你的npm命令行客户端与Artifactory一起工作,你首先需要使用下面的命令(下面的例子使用一个名为npm-repo):

替换默认注册表
npm config set registry http://:8081/artifactory/api/npm/npm-repo/

对于限定作用域的包,使用以下命令:

npm配置集@:注册表http://:8081/artifactory/api/npm/npm-repo/

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

注意,如果您这样做,您需要使用——注册表参数指定要将包发布到其中的本地存储库npm发布命令。

验证npm客户端

一旦你设置了默认注册表,你需要通过以下两种方式之一将npm客户端认证到Artifactory:

  • 运行npm登录命令
  • 使用基本身份验证。

使用npm登录

身份验证使用npm登录在5.4版中引入。

在npm客户端中运行以下命令。当出现提示时,提供您的Artifactory登录凭证:

npm登录

运行此命令后,Artifactory将创建一个non-expirable访问令牌客户端用于验证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

是您的Artifactory密码或APIKey

以下是回应的一个例子:

_auth = ywrtaw46e0rfu2vkzx1uofraaxh1y0t3bhn4c2rctviewnjf3pt0 = email = myemail@email.com always-auth = true


此外,如果您还在使用限定作用域的包,您还需要运行以下命令:

旋度-uadmin: <凭证> http:// < ARTIFACTORY_SERVER_DOMAIN >: 8081 / artifactory / api / npm / npm-repo /认证/ < >范围

是您的Artifactory密码或APIKey

将对此命令的响应粘贴到~ / .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 /企业/企业+许可证的JFrog Xray用户将获得一份增强的审计报告,其中包括来自Xray数据库的安全漏洞。当将Xray配置为与Artifactory一起工作时,即使不连接到任何远程存储库,也可以从头生成审计报告。

用户提供读权限在NPM虚拟存储库上可以使用以下NPM命令:

命令 描述
npm审计 根据npm客户端发送的依赖树返回一个漏洞报告https://npmjs.com/并可选地通过Jfrog Xray增强。
npm审计修复 获取相同的报告npm审计并试图自动按照报告中的建议行事。

要更改npm审计报告的来源,请设置npm.default.audit.provider系统属性(默认https://registry.npmjs.org)到您所需的审计提供者url。


发布(部署包)

设置您的凭据

npm命令行工具需要敏感的操作,例如发布是否按以下描述进行身份验证验证npm客户端以上。

部署您的包

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

  • 编辑你的package.json文件并添加publishConfig节添加到本地存储库:
    “publishConfig”:{“注册表”:“http://localhost: 8081 / artifactory /api / npm/ npm-local / "}

  • 对象提供本地存储库npm发布命令:
    npm发布——注册表http://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 Enterprise登录详细信息进行身份验证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:真YAML Artifactory系统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版本就已经可用了,但我们强烈建议只从2.1.9版本的npm命令行工具中使用Artifactory的npm作用域包。


自动重写外部依赖项

npm客户端请求的包经常使用包的外部依赖关系。. json文件。反过来,这些依赖可能需要额外的依赖。因此,当下载一个npm包时,你可能无法完全看到原始包所需的全部依赖项(无论是直接的还是传递的)。因此,您可能会从未知的外部资源下载恶意依赖项。2022世界杯阿根廷预选赛赛程

为了管理这个风险,并通过Artifactory维护使用外部包的最佳实践,您可以指定一个“安全的”Allow List,从中可以下载依赖项,缓存到Artifactory中,并配置为重写依赖项,以便nPM客户端通过虚拟存储库访问依赖项,如下所示:

  • 选择使依赖项重写复选框在NPM虚拟存储库中高级配置
  • 指定外部资源的允许列表模式,从这些资源中可以下载依赖项。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/ <用户名> / <文件名> .

重写工作流

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

  2. 如果任何依赖托管在外部资源(例如2022世界杯阿根廷预选赛赛程github.com),并且这些资源在允许列表2022世界杯阿根廷预选赛赛程中指定

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

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

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

  3. 因此,每当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 User Guide》中的“。”


观看视频



版权所有©2022 JFrog有限公司