带有Verdaccio的主机,发布和管理私人NPM软件包
Verdaccio:轻松管理私有npm包的利器
核心要点
- Verdaccio 是 npm 商业私有包托管、发布和管理服务的免费替代方案。它允许创建本地 npm 注册表,无需任何配置,并自带数据库。
- Verdaccio 充当本地缓存/代理服务器,在自定义存储库中找不到依赖项时,会从官方 npm 注册表下载依赖项,并将它们保存在本地存储文件夹中。它还支持创建本地私有包。
- Verdaccio 易于安装和配置,并且可以设置为在偶尔崩溃时自动重启。它还允许用户注册以发布包。
- 除了托管私有包外,Verdaccio 还缓存公共包。它检查其存储文件夹中是否有请求的包,如果找不到,则将请求转发到官方 npm 注册表,下载、存储并回复请求。这意味着即使官方注册表宕机,仍然可以访问缓存版本。
本文经 Panayiotis «pvgr» Velisarakos 和 Jurgen Van de Moere 审核。感谢所有 SitePoint 的同行评审员,使 SitePoint 内容尽善尽美!
众所周知,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 来访问注册表浏览器。
配置自定义注册表
服务器启动时,会自动创建一个名为 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/,您将看到列表中包含新的包。
示例使用者应用程序
现在我们已经发布了我们的私有包,让我们创建一个简单的演示应用程序来使用它。
在一个新文件夹 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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

zustand异步操作中的数据更新问题在使用zustand状态管理库时,经常会遇到异步操作导致数据更新不及时的问题。�...
