搜索
首页web前端js教程带有Verdaccio的主机,发布和管理私人NPM软件包

Verdaccio:轻松管理私有npm包的利器

Host, Publish and Manage Private npm Packages with Verdaccio

核心要点

  • Verdaccio 是 npm 商业私有包托管、发布和管理服务的免费替代方案。它允许创建本地 npm 注册表,无需任何配置,并自带数据库。
  • Verdaccio 充当本地缓存/代理服务器,在自定义存储库中找不到依赖项时,会从官方 npm 注册表下载依赖项,并将它们保存在本地存储文件夹中。它还支持创建本地私有包。
  • Verdaccio 易于安装和配置,并且可以设置为在偶尔崩溃时自动重启。它还允许用户注册以发布包。
  • 除了托管私有包外,Verdaccio 还缓存公共包。它检查其存储文件夹中是否有请求的包,如果找不到,则将请求转发到官方 npm 注册表,下载、存储并回复请求。这意味着即使官方注册表宕机,仍然可以访问缓存版本。

本文经 Panayiotis «pvgr» Velisarakos 和 Jurgen Van de Moere 审核。感谢所有 SitePoint 的同行评审员,使 SitePoint 内容尽善尽美!

Host, Publish and Manage Private npm Packages with Verdaccio

众所周知,npm及其注册表是事实上的 JavaScript 包管理器,也是全球最大的代码集合。但有时在开发令人惊艳的新包时,您需要额外的隐私保护。无论是公司项目(不应公开共享)、硕士/学士论文项目,还是仅仅因为您像我一样,有时会为自己在新主题上的最初尝试感到羞愧。

无论出于何种原因,都有多种选择。也许最简单的方法是注册 npm 的一项商业服务,然后就可以开始了。但这需要付费,可能并不适合每个人的钱包。

幸运的是,有一个名为 Verdaccio 的免费替代方案,它可以帮到您。

Verdaccio 简介

Verdaccio 是一个 npm 包,允许您创建本地 npm 注册表,无需任何配置。这是一个包含所有必要功能的项目,自带数据库。它通过充当本地缓存/代理服务器来实现这一点。

这意味着,每当您尝试从自定义存储库安装不存在的内容时,它都会 ping 官方 npm 注册表并下载依赖项。您的自定义存储库会将这些依赖项保存在名为 storage 的简单文件夹中。下一次安装将使用此本地缓存的副本。最重要的是,npm 客户端的一些命令(例如 npm login/adduser/publish)被复制以支持创建本地私有包,您稍后会在本文中看到它的使用。

如果您认为这没有什么新意,已经有 Sinopia 了,您是对的。Verdaccio 只是 Sinopia 的一个分支,它保持向后兼容性,但同时试图跟上官方 npm 的变化。Sinopia 中没有的一个这样的变化是作用域包,您在使用 Angular 2 或 TypeScript npm 托管类型之类的库时可能已经看到过。您可以通过前面的 @ 符号轻松识别它们:

<code># 安装 Angular2 依赖项
npm install @angular/core

# 安装 TypeScript 的官方 Node.js 类型定义
npm install @types/node</code>

Sinopia 和 Verdaccio 都可在 Mac/Linux 和 Windows 上运行。

Verdaccio 入门

由于 Verdaccio 是一个 npm 包,您只需运行以下命令即可安装它:

<code>npm install -g verdaccio</code>

随后调用 verdaccio 将启动实例并运行您的私有注册表。

默认情况下,它将在端口 4873 上监听。稍后我们将讨论如何更改这些设置。

在本文中,我们将介绍在您的开发机器上设置注册表。在公司环境中,您可能需要在专用服务器上执行此操作,以便所有开发人员都可以访问它。

Verdaccio 是一个 Node.js 应用程序,这意味着您应该注意在偶尔崩溃时重新启动它。我建议使用 pm2。您只需运行以下步骤:

<code># 安装 pm2
npm install pm2 -g

# 使用 pm2 启动 Verdaccio
pm2 start PATH-TO-GLOBAL-VERDACCIO/verdaccio
# --> 例如,对于 Windows:C:/Users/[USERNAME]/AppData/Roaming/npm/node_modules/verdaccio/bin/verdaccio</code>

此外,如果在阅读完本文后,您得出 Verdaccio 不适合您的结论,只需停止进程并使用以下命令卸载 Verdaccio:

<code>npm uninstall -g verdaccio</code>

配置客户端

注册表启动并运行后,您需要将 npm 客户端指向新的地址。这可以通过运行以下命令来完成:

<code>npm set registry https://www.php.cn/link/0f3ea482c9513bf4548f302a46d9932d/</code>

如果您只是按照本文中的步骤操作,稍后想要恢复到原始 npm 注册表,只需运行此命令 npm set registry https://www.php.cn/link/c0ab525d634e80fd8e20e3d6dc00b11c (用于基于 HTTPS 的访问)或 npm set registry https://www.php.cn/link/6baadc89159617043965f9e1889224e7 (用于经典 HTTP 访问)。

此外,如果您通过 HTTPS 提供注册表服务,则需要设置适当的 CA 信息。

<code># 将值设置为 null 将使用操作系统提供的列表
npm set ca null</code>

现在,您可以通过导航到地址 https://www.php.cn/link/0f3ea482c9513bf4548f302a46d9932d 来访问注册表浏览器。

Host, Publish and Manage Private npm Packages with Verdaccio

配置自定义注册表

服务器启动时,会自动创建一个名为 config.yaml 的新配置文件。默认情况下,它将在您的用户文件夹中创建。在 Windows 上,这可能如下所示:

<code>C:\Users\[USERNAME]\.config\verdaccio\config.yaml</code>

一个重要的设置是配置 Verdaccio 监听的默认端口。您可以通过在配置文件末尾添加以下几行来更改此设置。

<code># 安装 Angular2 依赖项
npm install @angular/core

# 安装 TypeScript 的官方 Node.js 类型定义
npm install @types/node</code>

另一个感兴趣的设置可能是使用代理,尤其是在公司环境中。这些设置如下所示:

<code>npm install -g verdaccio</code>

请记住,更改任何配置后,通过终止当前进程或停止 pm2 进程并重新启动它来重新启动 Verdaccio。

注册用户

最后但并非最不重要的是,我们需要配置一个用户,该用户将包发布到您的注册表。我们可以使用默认的 adduser 命令来完成此操作,该命令指向我们的自定义注册表。

<code># 安装 pm2
npm install pm2 -g

# 使用 pm2 启动 Verdaccio
pm2 start PATH-TO-GLOBAL-VERDACCIO/verdaccio
# --> 例如,对于 Windows:C:/Users/[USERNAME]/AppData/Roaming/npm/node_modules/verdaccio/bin/verdaccio</code>

之后,只需按照命令行上的提示操作即可。

请记住使用您之前配置的相同端口。

该用户将用于针对 Verdaccio 实例进行身份验证。除了上面提到的 config.yaml 文件外,您还会找到一个新创建的 htpasswd 文件,用于存储您的登录名和凭据。

您的第一个私有 npm 包

现在,我们准备创建我们的第一个私有包。我们将创建一个简单的 hello-world 包,并查看发布它的过程。

创建包

首先,在某个位置创建一个名为 hello-world 的新文件夹。现在,我们需要启动一个新包,我们使用命令 npm init 来完成此操作。您将被问到一堆问题,但现在,大多数问题都可以接受默认值。只需给它一个描述,将入口点保留在 index.js 中,并添加您的姓名作为作者。结果是一个名为 package.json 的文件,描述您的包。

一个好的做法是为您的包名称添加前缀,以便您可以立即分辨出您是在使用私有本地源还是官方 npm 源。

接下来的部分是创建实际的包。因此,我们创建一个 index.js 文件。这个简单的示例只会导出一个 HelloWorld 函数:

<code>npm uninstall -g verdaccio</code>

发布包

现在剩下的就是发布您的包了。为此,我们首先需要使用 npm login 登录我们的注册表。系统将提示您输入您之前设置的用户名和密码。

完成此操作后,在 hello-world 的根目录中只需运行 npm publish,即可完成操作。

如果您现在再次在浏览器中访问注册表浏览器,位于 https://www.php.cn/link/0f3ea482c9513bf4548f302a46d9932d/,您将看到列表中包含新的包

Host, Publish and Manage Private npm Packages with Verdaccio

示例使用者应用程序

现在我们已经发布了我们的私有包,让我们创建一个简单的演示应用程序来使用它。

在一个新文件夹 demo 中,我们再次使用 npm init 创建一个新的节点应用程序。同样,接受所有建议,也许只添加描述和作者信息。

之后,创建一个 index.js 文件,它将充当我们应用程序的根目录。

安装您的私有包

为了安装私有包,您基本上必须执行与标准 npm 过程相同的操作。

<code># 安装 Angular2 依赖项
npm install @angular/core

# 安装 TypeScript 的官方 Node.js 类型定义
npm install @types/node</code>

这会将包安装到您的 node_modules 文件夹中,并更新 package.json 的 dependencies 部分。

现在我们可以使用该包了。打开 index.js 并添加以下代码:

<code>npm install -g verdaccio</code>

现在,当您使用 node index.js 运行应用程序时,您应该在命令行上看到 Hello World 作为输出。

恭喜,您刚刚发布并使用了您自己的私有包!

请求公共包

公共包也是如此。您只需继续运行 npm install package-name,所有内容都将像往常一样安装在 node_modules 文件夹中。

Verdaccio 在幕后所做的是查看其存储文件夹并检查请求的包是否存在。如果不存在,它将尝试将请求转发到官方 npm 注册表,下载并存储它,然后回复您的请求。下次您为同一个包发出 npm install 请求时,它现在将提供该包。

因此,即使官方注册表由于任何原因而宕机或无法访问,您仍然可以访问您自己的缓存版本。Verdaccio 将始终只下载已请求的内容。如果您发布一些更新,则会根据需要下载这些更新。

请注意,注册表浏览器不应该显示公共包。如果您确实需要显示它们,您可以编辑 .sinopia-db.json 文件并将包名称手动添加到 list 数组中。请勿忘记之后重新启动 Verdaccio。

结论

因此,现在您可以托管您自己的私有注册表并受益于缓存的公共包。最重要的是,您现在还可以发布私有包,而无需与云端通信。安装完成后,所有相关的 npm 客户端命令与往常一样。

在您的一些包损坏或损坏的疯狂情况下,请记住它只是一个托管您的包的文件夹存储,因此导航到那里并删除有故障的包。下一次安装可能会解决您的问题。

我希望您喜欢这篇文章,并期待在评论中听到您的声音!

关于使用 Verdaccio 的私有 NPM 包的常见问题解答 (FAQ)

什么是 Verdaccio,为什么我应该将它用于我的私有 NPM 包?

Verdaccio 是一个开源的、轻量级的、强大的私有 NPM 注册表,允许您私下托管您自己的 NPM 包。对于想要控制其代码和依赖项的开发人员来说,这是一个很好的工具。Verdaccio 提供了一种安全有效的方式来管理 NPM 包,允许您缓存包、控制访问,甚至在主 NPM 注册表宕机时将其用作后备选项。

如何在我的系统上安装 Verdaccio?

安装 Verdaccio 非常简单。您需要在系统上安装 Node.js 和 npm。安装完成后,您可以使用 npm install 命令安装 Verdaccio:npm install -g verdaccio。这将在您的系统上全局安装 Verdaccio。

如何使用 Verdaccio 发布我的私有 NPM 包?

安装 Verdaccio 后,您可以通过首先使用 npm login 命令登录到您的 Verdaccio 注册表来发布您的私有 NPM 包。系统将提示您输入您的用户名、密码和电子邮件。登录后,导航到您的包目录并使用 npm publish 命令发布您的包。

如何控制我在 Verdaccio 中私有 NPM 包的访问权限?

Verdaccio 允许您通过其配置文件 config.yaml 来控制对私有 NPM 包的访问权限。您可以指定谁可以访问、发布和取消发布包。您还可以创建用户组并将权限分配给这些组。

我可以将 Verdaccio 用作公共 NPM 包的缓存吗?

是的,Verdaccio 可以充当公共 NPM 包的代理和缓存。这意味着,当您安装包时,Verdaccio 将首先检查它在其存储中是否可用。如果不可用,它将从公共 NPM 注册表获取它并将其缓存以备将来使用。

如何配置 Verdaccio 以将其用作后备选项?

您可以通过在 .npmrc 文件中将其设置为您的主要注册表来配置 Verdaccio 以充当后备选项。这样,每当主 NPM 注册表宕机时,npm 将自动使用 Verdaccio。

我可以将 Verdaccio 与其他工具集成吗?

是的,Verdaccio 可以与各种工具集成,例如 Docker、Kubernetes 和 GitLab。这使其成为一个通用的工具,可以适应许多不同的开发工作流程。

如何将我的包迁移到 Verdaccio?

将您的包迁移到 Verdaccio 与将它们发布到 Verdaccio 注册表一样简单。您可以通过登录到您的 Verdaccio 注册表并使用 npm publish 命令来完成此操作。

我可以在团队环境中使用 Verdaccio 吗?

当然可以。Verdaccio 旨在在团队环境中工作。您可以控制谁可以访问哪些包,使其成为协作的绝佳工具。

如何为 Verdaccio 做出贡献?

Verdaccio 是一个开源项目,随时欢迎贡献。您可以通过报告错误、建议功能、改进文档或提交拉取请求来做出贡献。

以上是带有Verdaccio的主机,发布和管理私人NPM软件包的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript数据类型:浏览器和nodejs之间是否有区别?JavaScript数据类型:浏览器和nodejs之间是否有区别?May 14, 2025 am 12:15 AM

JavaScript核心数据类型在浏览器和Node.js中一致,但处理方式和额外类型有所不同。1)全局对象在浏览器中为window,在Node.js中为global。2)Node.js独有Buffer对象,用于处理二进制数据。3)性能和时间处理在两者间也有差异,需根据环境调整代码。

JavaScript评论:使用//和 / * * / * / * /JavaScript评论:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:开发人员的比较分析Python vs. JavaScript:开发人员的比较分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

Python vs. JavaScript:选择合适的工具Python vs. JavaScript:选择合适的工具May 08, 2025 am 12:10 AM

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript:了解每个的优势Python和JavaScript:了解每个的优势May 06, 2025 am 12:15 AM

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

JavaScript的核心:它是在C还是C上构建的?JavaScript的核心:它是在C还是C上构建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript应用程序:从前端到后端JavaScript应用程序:从前端到后端May 04, 2025 am 12:12 AM

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

Python vs. JavaScript:您应该学到哪种语言?Python vs. JavaScript:您应该学到哪种语言?May 03, 2025 am 12:10 AM

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中