搜索
首页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的不同应用从网站到应用程序:JavaScript的不同应用Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python vs. JavaScript:比较用例和应用程序Python vs. JavaScript:比较用例和应用程序Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C/C在JavaScript口译员和编译器中的作用C/C在JavaScript口译员和编译器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在行动中:现实世界中的示例和项目JavaScript在行动中:现实世界中的示例和项目Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

了解JavaScript引擎:实施详细信息了解JavaScript引擎:实施详细信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python vs. JavaScript:学习曲线和易用性Python vs. JavaScript:学习曲线和易用性Apr 16, 2025 am 12:12 AM

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python vs. JavaScript:社区,图书馆和资源Python vs. JavaScript:社区,图书馆和资源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

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

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

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

安全考试浏览器

安全考试浏览器

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

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器